{"_id":"@anish23_05/timo-mcp","_rev":"4-d26e01f15666bbb902a7954ff95dc8ba","name":"@anish23_05/timo-mcp","dist-tags":{"latest":"0.3.0"},"versions":{"0.1.0":{"name":"@anish23_05/timo-mcp","version":"0.1.0","license":"UNLICENSED","_id":"@anish23_05/timo-mcp@0.1.0","maintainers":[{"name":"anish23_05","email":"anishsuman2305@gmail.com"}],"homepage":"https://github.com/RelicWave-Technologies/grind#readme","bugs":{"url":"https://github.com/RelicWave-Technologies/grind/issues"},"bin":{"timo-mcp":"dist/index.cjs"},"dist":{"shasum":"514ad728444342e1b86005e46758ac14740a9a63","tarball":"https://registry.npmjs.org/@anish23_05/timo-mcp/-/timo-mcp-0.1.0.tgz","fileCount":3,"integrity":"sha512-ZioJ2iU4zlNIfNOJcqNZ8LkA/rOJzaNBSPH0nVVhbmiSCWweFBc7g+izcT5HkUYRrkgtM7GyFcUstoOuIBQpyw==","signatures":[{"sig":"MEQCIB5pArppITOHSKzjYh7v52169zrYjihmELeLnmj5YfHJAiArydTly9TZcUE+yoC9fSmEUHaEF/h2ey8GOR9zZPYvQQ==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@anish23_05%2ftimo-mcp@0.1.0","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":8693},"main":"dist/index.cjs","type":"module","_from":"file:anish23_05-timo-mcp-0.1.0.tgz","engines":{"node":">=20.18"},"private":false,"scripts":{"dev":"tsx src/index.ts","lint":"eslint src","test":"vitest run","build":"tsup src/index.ts --format cjs --target node20 --clean --out-dir dist","start":"node dist/index.cjs","typecheck":"tsc -p tsconfig.json --noEmit","pack:dry-run":"npm pack --dry-run"},"_npmUser":{"name":"anish23_05","email":"anishsuman2305@gmail.com"},"_resolved":"/tmp/e5b4c1f7ac58e54d2e713d47ea66b1f6/anish23_05-timo-mcp-0.1.0.tgz","_integrity":"sha512-ZioJ2iU4zlNIfNOJcqNZ8LkA/rOJzaNBSPH0nVVhbmiSCWweFBc7g+izcT5HkUYRrkgtM7GyFcUstoOuIBQpyw==","repository":{"url":"git+https://github.com/RelicWave-Technologies/grind.git","type":"git","directory":"apps/mcp"},"_npmVersion":"10.8.2","description":"Read-only MCP server for Timo workspace data.","directories":{},"_nodeVersion":"20.18.3","dependencies":{"zod":"3.25.76","@modelcontextprotocol/sdk":"1.29.0"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"tsx":"4.19.2","tsup":"8.3.5","vitest":"2.1.4","typescript":"5.6.3","@types/node":"20.16.13","@grind/tsconfig":"0.0.0"},"_npmOperationalInternal":{"tmp":"tmp/timo-mcp_0.1.0_1783541434695_0.40036483214297625","host":"s3://npm-registry-packages-npm-production"}},"0.1.1":{"name":"@anish23_05/timo-mcp","version":"0.1.1","license":"UNLICENSED","_id":"@anish23_05/timo-mcp@0.1.1","maintainers":[{"name":"anish23_05","email":"anishsuman2305@gmail.com"}],"homepage":"https://github.com/RelicWave-Technologies/grind#readme","bugs":{"url":"https://github.com/RelicWave-Technologies/grind/issues"},"bin":{"timo-mcp":"dist/index.cjs"},"dist":{"shasum":"7d2e0edcbac33430ea58ca74cebda5ac52b9d22d","tarball":"https://registry.npmjs.org/@anish23_05/timo-mcp/-/timo-mcp-0.1.1.tgz","fileCount":4,"integrity":"sha512-/ABmLbyUWB5Yonb7Ovh1gf0bHgLkmY8avmCTnCVqOUmcR71dauucZpDZqYFywnA1T/vii64cX5q5b5kFZyKhjw==","signatures":[{"sig":"MEQCIEDC2ePTUCQLOHdxwqwhTSOu3btUoOoaeE/X++Ftay0oAiB+NbKd2/yxi+jEa8rv29SXMhEqBTdtHnj0ffUxaQdBAQ==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@anish23_05%2ftimo-mcp@0.1.1","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":24575},"main":"dist/index.cjs","type":"module","_from":"file:anish23_05-timo-mcp-0.1.1.tgz","engines":{"node":">=20.18"},"private":false,"scripts":{"dev":"tsx src/index.ts","lint":"eslint src","test":"vitest run","build":"tsup src/index.ts --format cjs --target node20 --clean --out-dir dist","start":"node dist/index.cjs","typecheck":"tsc -p tsconfig.json --noEmit","pack:dry-run":"npm pack --dry-run"},"_npmUser":{"name":"anish23_05","email":"anishsuman2305@gmail.com"},"_resolved":"/tmp/679072e88b2f9fcf65d575c98979c1f9/anish23_05-timo-mcp-0.1.1.tgz","_integrity":"sha512-/ABmLbyUWB5Yonb7Ovh1gf0bHgLkmY8avmCTnCVqOUmcR71dauucZpDZqYFywnA1T/vii64cX5q5b5kFZyKhjw==","repository":{"url":"git+https://github.com/RelicWave-Technologies/grind.git","type":"git","directory":"apps/mcp"},"_npmVersion":"10.8.2","description":"Read-only MCP server for Timo workspace data.","directories":{},"_nodeVersion":"20.18.3","dependencies":{"zod":"3.25.76","@modelcontextprotocol/sdk":"1.29.0"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"tsx":"4.19.2","tsup":"8.3.5","vitest":"2.1.4","typescript":"5.6.3","@types/node":"20.16.13","@grind/tsconfig":"0.0.0"},"_npmOperationalInternal":{"tmp":"tmp/timo-mcp_0.1.1_1783542045252_0.9121300205514071","host":"s3://npm-registry-packages-npm-production"}},"0.2.0":{"name":"@anish23_05/timo-mcp","version":"0.2.0","license":"UNLICENSED","_id":"@anish23_05/timo-mcp@0.2.0","maintainers":[{"name":"anish23_05","email":"anishsuman2305@gmail.com"}],"homepage":"https://github.com/RelicWave-Technologies/grind#readme","bugs":{"url":"https://github.com/RelicWave-Technologies/grind/issues"},"bin":{"timo-mcp":"dist/index.cjs"},"dist":{"shasum":"66ff17d8b00970403e7b1718a96b9a3ca46da00a","tarball":"https://registry.npmjs.org/@anish23_05/timo-mcp/-/timo-mcp-0.2.0.tgz","fileCount":4,"integrity":"sha512-w+zUHLqtP1SCFwaLh0fIgN4Aqpff+cGsRcjqZR2Dg1uo/oejf/Irm+BGKqkChpPNN4fgGT6878Vzy59SVD60LA==","signatures":[{"sig":"MEUCIQDwB9AfTReF++nAkmCOrMqTqvbhfhTnShrjZ93zSYWRagIgWoZBscRSPlPx5pgdqrMYO4IZxSkOM6DrTJ7QlQvSyag=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@anish23_05%2ftimo-mcp@0.2.0","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":34108},"main":"dist/index.cjs","type":"module","_from":"file:anish23_05-timo-mcp-0.2.0.tgz","engines":{"node":">=20.18"},"private":false,"scripts":{"dev":"tsx src/index.ts","lint":"eslint src","test":"vitest run","build":"tsup src/index.ts --format cjs --target node20 --clean --out-dir dist","start":"node dist/index.cjs","typecheck":"tsc -p tsconfig.json --noEmit","pack:dry-run":"npm pack --dry-run"},"_npmUser":{"name":"anish23_05","email":"anishsuman2305@gmail.com"},"_resolved":"/tmp/58c9e35a3805b5e5cda42a52da6b8f16/anish23_05-timo-mcp-0.2.0.tgz","_integrity":"sha512-w+zUHLqtP1SCFwaLh0fIgN4Aqpff+cGsRcjqZR2Dg1uo/oejf/Irm+BGKqkChpPNN4fgGT6878Vzy59SVD60LA==","repository":{"url":"git+https://github.com/RelicWave-Technologies/grind.git","type":"git","directory":"apps/mcp"},"_npmVersion":"10.8.2","description":"Detailed read-only MCP server for Timo workspace data.","directories":{},"_nodeVersion":"20.18.3","dependencies":{"zod":"3.25.76","@modelcontextprotocol/sdk":"1.29.0"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"tsx":"4.19.2","tsup":"8.3.5","vitest":"2.1.4","typescript":"5.6.3","@types/node":"20.16.13","@grind/tsconfig":"0.0.0"},"_npmOperationalInternal":{"tmp":"tmp/timo-mcp_0.2.0_1783545378694_0.18467937361636588","host":"s3://npm-registry-packages-npm-production"}},"0.3.0":{"name":"@anish23_05/timo-mcp","version":"0.3.0","description":"Detailed read-only MCP server for Timo workspace data.","private":false,"type":"module","bin":{"timo-mcp":"dist/index.cjs"},"main":"dist/index.cjs","engines":{"node":">=20.18"},"license":"UNLICENSED","repository":{"type":"git","url":"git+https://github.com/RelicWave-Technologies/grind.git","directory":"apps/mcp"},"publishConfig":{"access":"public"},"dependencies":{"@modelcontextprotocol/sdk":"1.29.0","zod":"3.25.76"},"devDependencies":{"@types/node":"20.16.13","tsup":"8.3.5","tsx":"4.19.2","typescript":"5.6.3","vitest":"2.1.4","@grind/tsconfig":"0.0.0"},"scripts":{"build":"tsup src/index.ts --format cjs --target node20 --clean --out-dir dist","dev":"tsx src/index.ts","pack:dry-run":"npm pack --dry-run","start":"node dist/index.cjs","typecheck":"tsc -p tsconfig.json --noEmit","test":"vitest run","lint":"eslint src"},"_id":"@anish23_05/timo-mcp@0.3.0","bugs":{"url":"https://github.com/RelicWave-Technologies/grind/issues"},"homepage":"https://github.com/RelicWave-Technologies/grind#readme","_integrity":"sha512-96ELB/WsLM3bwneMbCX/gOQon/JSV7qxvID5p1CQ4L3qkXXkm9zfSbv9s7jccRiznI9BFFhDcpxVJJLCUQ4I1w==","_resolved":"/tmp/e7cfda8441765d0a2375e28f6afb1290/anish23_05-timo-mcp-0.3.0.tgz","_from":"file:anish23_05-timo-mcp-0.3.0.tgz","_nodeVersion":"20.18.3","_npmVersion":"10.8.2","dist":{"integrity":"sha512-96ELB/WsLM3bwneMbCX/gOQon/JSV7qxvID5p1CQ4L3qkXXkm9zfSbv9s7jccRiznI9BFFhDcpxVJJLCUQ4I1w==","shasum":"24b53905b2d9916a241ce2a0ec5e1eef8304cf66","tarball":"https://registry.npmjs.org/@anish23_05/timo-mcp/-/timo-mcp-0.3.0.tgz","fileCount":4,"unpackedSize":36632,"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@anish23_05%2ftimo-mcp@0.3.0","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"signatures":[{"keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U","sig":"MEQCIGhXoG2CX5zflr9PvfFyWndiJX+C4AlxD6VisjyouwOXAiA/+sJH25A5zKsIUL/dmlwW76qLj53AIc6BawGddvwEhg=="}]},"_npmUser":{"name":"anish23_05","email":"anishsuman2305@gmail.com"},"directories":{},"maintainers":[{"name":"anish23_05","email":"anishsuman2305@gmail.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages-npm-production","tmp":"tmp/timo-mcp_0.3.0_1783586151190_0.6504840112879984"},"_hasShrinkwrap":false}},"time":{"created":"2026-07-08T20:10:34.562Z","modified":"2026-07-09T08:35:51.620Z","0.1.0":"2026-07-08T20:10:34.836Z","0.1.1":"2026-07-08T20:20:45.422Z","0.2.0":"2026-07-08T21:16:18.864Z","0.3.0":"2026-07-09T08:35:51.328Z"},"bugs":{"url":"https://github.com/RelicWave-Technologies/grind/issues"},"license":"UNLICENSED","homepage":"https://github.com/RelicWave-Technologies/grind#readme","repository":{"type":"git","url":"git+https://github.com/RelicWave-Technologies/grind.git","directory":"apps/mcp"},"description":"Detailed read-only MCP server for Timo workspace data.","maintainers":[{"name":"anish23_05","email":"anishsuman2305@gmail.com"}],"readme":"<p align=\"center\">\n  <img src=\"https://unpkg.com/@anish23_05/timo-mcp@latest/assets/timo-mascot.png\" width=\"112\" alt=\"Timo mascot\" />\n</p>\n\n<h1 align=\"center\">Timo MCP</h1>\n\n<p align=\"center\">\n  Detailed read-only MCP tools for Timo workspace operations, device health, time summaries, and audit context.\n</p>\n\n---\n\nTimo MCP runs locally over stdio and talks only to the Timo API using a scoped API token.\n\nIt does not connect to the VM, Postgres, dashboard cookies, Lark write APIs, screenshots, or raw activity samples.\n\n## Install\n\nCreate an API token in Timo:\n\n1. Open Timo Dashboard.\n2. Go to **Integrations**.\n3. Create an API token with the read-only scopes you want.\n4. Copy the token once and keep it private.\n\nAdd this to your MCP client config:\n\n```json\n{\n  \"mcpServers\": {\n    \"timo\": {\n      \"command\": \"npx\",\n      \"args\": [\"-y\", \"@anish23_05/timo-mcp@latest\"],\n      \"env\": {\n        \"TIMO_API_BASE\": \"https://timo.emiactech.com\",\n        \"TIMO_API_TOKEN\": \"timo_mcp_atk_...\"\n      }\n    }\n  }\n}\n```\n\nRestart the MCP client after editing the config.\n\n## Tools\n\n- `timo_mcp_capabilities` — explains tools, scopes, limits, date formats, and privacy boundaries.\n- `timo_workspace_overview` — workspace totals for people, teams, devices, versions, today time, manual-time requests, and open activity flags.\n- `timo_people_list` — active people with role, team, managed team, shift, and device summary.\n- `timo_user_detail` — one user's profile, device health, time totals, and recent manual-time requests.\n- `timo_device_health` — app version, platform, runtime state, heartbeat freshness, and permission health.\n- `timo_version_adoption` — version/platform/state adoption buckets and unknown/stale users.\n- `timo_running_users` — users currently RUNNING with a fresh heartbeat.\n- `timo_team_summary` — team managers, roster, device counts, permission issues, and time totals.\n- `timo_break_summary` — inferred break time by user/day with source-of-truth gap evidence; lunch is separated as the longest qualifying candidate when a long break overlaps the local lunch window.\n- `timo_time_summary` — per-user/per-day tracked, meeting, manual, invalidated, and total time.\n- `timo_manual_time_requests` — manual-time request and decision audit metadata.\n- `timo_activity_flags_summary` — privacy-safe flag counts and recent flag summaries.\n\n## Scopes\n\n- `read:people` — people, roles, teams, shifts, roster context.\n- `read:device-health` — desktop platform, version, runtime state, heartbeat, permissions.\n- `read:time-summary` — aggregated time summaries and privacy-safe activity flag summaries.\n- `read:manual-time` — manual-time requests and approval audit metadata.\n\nSome detailed tools require multiple scopes. If a token is missing a scope, the tool fails clearly with `insufficient_scope` instead of returning partial or guessed data.\n\n## Example Questions\n\n- \"Which Timo version is everyone using?\"\n- \"Who is currently running Timo?\"\n- \"Show me users with stale or missing desktop heartbeats.\"\n- \"Which Mac users are missing Screen Recording or Accessibility?\"\n- \"Summarize today's tracked time by team.\"\n- \"Kal kisne kitna break liya?\"\n- \"Yesterday, show lunch candidates separately from other breaks.\"\n- \"For yesterday's breaks, show the actual gaps and any manual-time approval reasons.\"\n- \"Show pending manual-time requests.\"\n- \"Give me privacy-safe activity flag counts for this week.\"\n- \"What can this Timo MCP read, and what is intentionally blocked?\"\n\n## Privacy\n\nThis MCP never exposes:\n\n- screenshots or screenshot URLs\n- S3 keys\n- raw `ActivitySample` rows\n- raw keystroke/click/mouse minute timelines\n- foreground window titles\n- browser URLs\n- dashboard cookies\n- token hashes or secrets\n\nIt also has no write tools. It cannot approve requests, edit time, create users, change settings, or send Lark messages.\n\n## Limits\n\n- List tools return at most 200 rows.\n- Summary-style tools allow at most 31 days per request.\n- Dates use `YYYY-MM-DD`.\n- Timezone accepts IANA names such as `Asia/Kolkata` or `UTC`.\n- Break summaries default to yesterday. Breaks are inferred from gaps between tracked work/meeting/manual blocks; each gap includes previous/next tracked-block evidence. Lunch is the longest qualifying candidate only unless users explicitly label it.\n\n## Security\n\n- Use one token per person or machine.\n- Do not paste tokens into chat or commit them to git.\n- Revoke lost or shared tokens from **Integrations**.\n- Rotate any token that was accidentally shared.\n\n## Local Development\n\n```bash\npnpm --filter @anish23_05/timo-mcp build\nTIMO_API_BASE=http://localhost:4010 TIMO_API_TOKEN=token node apps/mcp/dist/index.cjs\n```\n","readmeFilename":"README.md"}