{"_id":"@davebream/bullet-mcp","_rev":"4-0410a304f3f4915aab030d3941e48b91","name":"@davebream/bullet-mcp","dist-tags":{"latest":"1.2.0"},"versions":{"1.0.0":{"name":"@davebream/bullet-mcp","version":"1.0.0","keywords":["mcp","model-context-protocol","bullet","tasks","ai","claude"],"author":{"name":"Dawid Leszczyński"},"license":"MIT","_id":"@davebream/bullet-mcp@1.0.0","maintainers":[{"name":"davebream","email":"dawid.leszczynski@gmail.com"}],"homepage":"https://github.com/davebream/bullet-mcp#readme","bugs":{"url":"https://github.com/davebream/bullet-mcp/issues"},"bin":{"bullet-mcp":"dist/index.js"},"dist":{"shasum":"4719cd6f6dac315409e5196bc1460ae4311ae516","tarball":"https://registry.npmjs.org/@davebream/bullet-mcp/-/bullet-mcp-1.0.0.tgz","fileCount":40,"integrity":"sha512-WqySPPEmu1PNhJ3DrCqaTjXqODJ0oo4y47kCwpcoVKcdSIrP32mHcGgX77NKf5FjTRCpTNSDrY9XBKVRYxiNJA==","signatures":[{"sig":"MEUCIGGYQv7aV9Bpt3uPT+/YpDwG6GjqiZmHhvpdp1LPpVpoAiEA2Q3l0PSjh7FLzl0K6rpeN86Vre48R3Ovg9OAfEsLSXk=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":78450},"main":"dist/index.js","type":"module","types":"./dist/index.d.ts","engines":{"node":">=18"},"scripts":{"dev":"tsc --watch","lint":"biome check .","test":"vitest run","build":"tsc","smoke":"bun run build && echo '{\"jsonrpc\":\"2.0\",\"id\":1,\"method\":\"initialize\",\"params\":{\"protocolVersion\":\"2024-11-05\",\"capabilities\":{},\"clientInfo\":{\"name\":\"smoke\",\"version\":\"0.1.0\"}}}' | BULLET_API_TOKEN=blt_smoke node dist/index.js 2>/dev/null | head -1","start":"node dist/index.js","format":"biome format --write .","generate":"openapi-typescript spec/openapi.json -o src/client/types.generated.ts --default-non-nullable false","lint:fix":"biome check --write .","typecheck":"tsc --noEmit","test:watch":"vitest","test:coverage":"vitest run --coverage"},"_npmUser":{"name":"davebream","email":"dawid.leszczynski@gmail.com"},"repository":{"url":"git+https://github.com/davebream/bullet-mcp.git","type":"git"},"_npmVersion":"11.8.0","description":"MCP server for the Bullet API (tasks, notes, events)","directories":{},"_nodeVersion":"25.6.0","dependencies":{"zod":"^4.4.3","@modelcontextprotocol/sdk":"^1.12.1"},"_hasShrinkwrap":false,"devDependencies":{"vitest":"^3.2.1","typescript":"^5.8.3","@types/node":"^25.7.0","@biomejs/biome":"^1.9.4","openapi-typescript":"^7.6.1","@vitest/coverage-v8":"^3.2.1"},"_npmOperationalInternal":{"tmp":"tmp/bullet-mcp_1.0.0_1778605878935_0.3159254955049644","host":"s3://npm-registry-packages-npm-production"}},"1.0.3":{"name":"@davebream/bullet-mcp","version":"1.0.3","keywords":["mcp","model-context-protocol","bullet","tasks","ai","claude"],"author":{"name":"Dawid Leszczyński"},"license":"MIT","_id":"@davebream/bullet-mcp@1.0.3","maintainers":[{"name":"davebream","email":"dawid.leszczynski@gmail.com"}],"homepage":"https://github.com/davebream/bullet-mcp#readme","bugs":{"url":"https://github.com/davebream/bullet-mcp/issues"},"bin":{"bullet-mcp":"dist/index.js"},"dist":{"shasum":"2414aeea6df568f20c32d9a942c47a5fa8697bc0","tarball":"https://registry.npmjs.org/@davebream/bullet-mcp/-/bullet-mcp-1.0.3.tgz","fileCount":40,"integrity":"sha512-aOgnOR9KqZJPsURcmBFrQqWBlNyh4fhPp70LsnwykeedSz96Z/2EScXMsLQtk19FVHNUmzIbAnEUx9nwt5TH/A==","signatures":[{"sig":"MEYCIQCO2Qa57STvjUMqSKd3Irx+EKuxQjrwNqtSimQ7An82OQIhAJ+p+vCW3D2hh+5ltRJedB57Ia4hSO25DIK5C2S3bBaa","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@davebream%2fbullet-mcp@1.0.3","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":80432},"main":"dist/index.js","type":"module","types":"./dist/index.d.ts","engines":{"node":">=18"},"gitHead":"d8c8250bedce80c0f4ae24451866d0967de3de19","scripts":{"dev":"tsc --watch","lint":"biome check .","test":"vitest run","build":"tsc","smoke":"bun run build && echo '{\"jsonrpc\":\"2.0\",\"id\":1,\"method\":\"initialize\",\"params\":{\"protocolVersion\":\"2024-11-05\",\"capabilities\":{},\"clientInfo\":{\"name\":\"smoke\",\"version\":\"0.1.0\"}}}' | BULLET_API_TOKEN=blt_smoke node dist/index.js 2>/dev/null | head -1","start":"node dist/index.js","format":"biome format --write .","generate":"openapi-typescript spec/openapi.json -o src/client/types.generated.ts --default-non-nullable false","lint:fix":"biome check --write .","typecheck":"tsc --noEmit","test:watch":"vitest","test:coverage":"vitest run --coverage"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:fd01b3e8-57a5-452c-8b4d-efc9cac7e371"}},"repository":{"url":"git+https://github.com/davebream/bullet-mcp.git","type":"git"},"_npmVersion":"11.11.0","description":"MCP server for the Bullet API (tasks, notes, events)","directories":{},"_nodeVersion":"24.14.1","dependencies":{"zod":"^4.4.3","@modelcontextprotocol/sdk":"^1.12.1"},"_hasShrinkwrap":false,"devDependencies":{"vitest":"^3.2.1","typescript":"^5.8.3","@types/node":"^25.7.0","@biomejs/biome":"^1.9.4","openapi-typescript":"^7.6.1","@vitest/coverage-v8":"^3.2.1"},"_npmOperationalInternal":{"tmp":"tmp/bullet-mcp_1.0.3_1778607776228_0.9095736351212202","host":"s3://npm-registry-packages-npm-production"}},"1.1.0":{"name":"@davebream/bullet-mcp","version":"1.1.0","keywords":["mcp","model-context-protocol","bullet","tasks","ai","claude"],"author":{"name":"Dawid Leszczyński"},"license":"MIT","_id":"@davebream/bullet-mcp@1.1.0","maintainers":[{"name":"davebream","email":"dawid.leszczynski@gmail.com"}],"homepage":"https://github.com/davebream/bullet-mcp#readme","bugs":{"url":"https://github.com/davebream/bullet-mcp/issues"},"bin":{"bullet-mcp":"dist/index.js"},"dist":{"shasum":"a261bd5a9557f516d79ad699de3f7ad792ffc5a2","tarball":"https://registry.npmjs.org/@davebream/bullet-mcp/-/bullet-mcp-1.1.0.tgz","fileCount":40,"integrity":"sha512-lRAtDOLWYN73Nfl/yIUbM1vkVRFTxg1sS9ve5UqQouNjL1OMJgV7IYVTiRuHkQ7wMRYoAwskY5qLpbQdC0Uw6w==","signatures":[{"sig":"MEUCIDhIeDhPWY1ePQqtpEPfi2JUW9aCg7tOp/dVWqSAEU+jAiEAyNgM70OMeu9GweF3tcV6/tP0lpjoccPHi/6VO2RLuAE=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@davebream%2fbullet-mcp@1.1.0","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":85890},"main":"dist/index.js","type":"module","types":"./dist/index.d.ts","engines":{"node":">=18"},"gitHead":"db6bc86480ff33ad2cb376be6fd81ba1a2f11ebd","scripts":{"dev":"tsc --watch","lint":"biome check .","test":"vitest run","build":"tsc","smoke":"bun run build && echo '{\"jsonrpc\":\"2.0\",\"id\":1,\"method\":\"initialize\",\"params\":{\"protocolVersion\":\"2024-11-05\",\"capabilities\":{},\"clientInfo\":{\"name\":\"smoke\",\"version\":\"0.1.0\"}}}' | BULLET_API_TOKEN=blt_smoke node dist/index.js 2>/dev/null | head -1","start":"node dist/index.js","format":"biome format --write .","generate":"openapi-typescript spec/openapi.json -o src/client/types.generated.ts --default-non-nullable false","lint:fix":"biome check --write .","typecheck":"tsc --noEmit","test:watch":"vitest","test:coverage":"vitest run --coverage"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:fd01b3e8-57a5-452c-8b4d-efc9cac7e371"}},"repository":{"url":"git+https://github.com/davebream/bullet-mcp.git","type":"git"},"_npmVersion":"11.11.0","description":"MCP server for the Bullet API (tasks, notes, events)","directories":{},"_nodeVersion":"24.14.1","dependencies":{"zod":"^4.4.3","@modelcontextprotocol/sdk":"^1.12.1"},"_hasShrinkwrap":false,"devDependencies":{"vitest":"^3.2.1","typescript":"^5.8.3","@types/node":"^25.7.0","@biomejs/biome":"^1.9.4","openapi-typescript":"^7.6.1","@vitest/coverage-v8":"^3.2.1"},"_npmOperationalInternal":{"tmp":"tmp/bullet-mcp_1.1.0_1778611225604_0.40686059207885017","host":"s3://npm-registry-packages-npm-production"}},"1.2.0":{"name":"@davebream/bullet-mcp","version":"1.2.0","description":"MCP server for the Bullet API (tasks, notes, events)","license":"MIT","author":{"name":"Dawid Leszczyński"},"repository":{"type":"git","url":"git+https://github.com/davebream/bullet-mcp.git"},"keywords":["mcp","model-context-protocol","bullet","tasks","ai","claude"],"type":"module","main":"dist/index.js","bin":{"bullet-mcp":"dist/index.js"},"engines":{"node":">=18"},"scripts":{"build":"tsc","dev":"tsc --watch","start":"node dist/index.js","test":"vitest run","test:watch":"vitest","test:coverage":"vitest run --coverage","lint":"biome check .","lint:fix":"biome check --write .","format":"biome format --write .","typecheck":"tsc --noEmit","generate":"openapi-typescript spec/openapi.json -o src/client/types.generated.ts --default-non-nullable false","smoke":"bun run build && echo '{\"jsonrpc\":\"2.0\",\"id\":1,\"method\":\"initialize\",\"params\":{\"protocolVersion\":\"2024-11-05\",\"capabilities\":{},\"clientInfo\":{\"name\":\"smoke\",\"version\":\"0.1.0\"}}}' | BULLET_API_TOKEN=blt_smoke node dist/index.js 2>/dev/null | head -1"},"dependencies":{"@modelcontextprotocol/sdk":"^1.12.1","zod":"^4.4.3"},"devDependencies":{"@biomejs/biome":"^1.9.4","@types/node":"^25.7.0","@vitest/coverage-v8":"^3.2.1","openapi-typescript":"^7.6.1","typescript":"^5.8.3","vitest":"^3.2.1"},"gitHead":"1be95be31f54042b5d829011313b60a92f358d5d","types":"./dist/index.d.ts","_id":"@davebream/bullet-mcp@1.2.0","bugs":{"url":"https://github.com/davebream/bullet-mcp/issues"},"homepage":"https://github.com/davebream/bullet-mcp#readme","_nodeVersion":"24.14.1","_npmVersion":"11.11.0","dist":{"integrity":"sha512-OoEp93du3anq/I7DvvHO3E97wqRmAR1OtMKp1PvA1BJmj+k/F2hOY3uAxjL3YkNAoiE3yPjIh1QgrWdAMczq9Q==","shasum":"279cf25769fd299c6a40f4cc29b25dee901629ba","tarball":"https://registry.npmjs.org/@davebream/bullet-mcp/-/bullet-mcp-1.2.0.tgz","fileCount":40,"unpackedSize":107120,"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@davebream%2fbullet-mcp@1.2.0","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"signatures":[{"keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U","sig":"MEQCICVMCUiTxaAUDxzlHF+TAa8baAXjpdH4aFySFBPKJrxCAiAQOfyPgR2IjyFJCCvqOSYjp8hvbBFffNmY8aWZQtb7Pg=="}]},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:fd01b3e8-57a5-452c-8b4d-efc9cac7e371"}},"directories":{},"maintainers":[{"name":"davebream","email":"dawid.leszczynski@gmail.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages-npm-production","tmp":"tmp/bullet-mcp_1.2.0_1778619120578_0.8162522704850308"},"_hasShrinkwrap":false}},"time":{"created":"2026-05-12T17:11:18.854Z","modified":"2026-05-12T20:52:01.028Z","1.0.0":"2026-05-12T17:11:19.127Z","1.0.3":"2026-05-12T17:42:56.372Z","1.1.0":"2026-05-12T18:40:25.752Z","1.2.0":"2026-05-12T20:52:00.745Z"},"bugs":{"url":"https://github.com/davebream/bullet-mcp/issues"},"author":{"name":"Dawid Leszczyński"},"license":"MIT","homepage":"https://github.com/davebream/bullet-mcp#readme","keywords":["mcp","model-context-protocol","bullet","tasks","ai","claude"],"repository":{"type":"git","url":"git+https://github.com/davebream/bullet-mcp.git"},"description":"MCP server for the Bullet API (tasks, notes, events)","maintainers":[{"name":"davebream","email":"dawid.leszczynski@gmail.com"}],"readme":"# Bullet MCP\n\n[![CI](https://github.com/davebream/bullet-mcp/actions/workflows/ci.yml/badge.svg)](https://github.com/davebream/bullet-mcp/actions/workflows/ci.yml)\n[![API Version Check](https://github.com/davebream/bullet-mcp/actions/workflows/api-version-check.yml/badge.svg)](https://github.com/davebream/bullet-mcp/actions/workflows/api-version-check.yml)\n[![License: MIT](https://img.shields.io/badge/License-MIT-blue.svg)](LICENSE)\n\nMCP server for the [Bullet](https://bullet.to) API. Manage tasks, notes, and events from Claude Desktop, Claude Code, VS Code, Cursor, or any MCP client.\n\nTypes are generated from the [OpenAPI spec](spec/openapi.json). Tool input schemas use Zod that mirrors the API contract. Registration tests verify they stay in sync. The MCP server version matches the Bullet API version.\n\n## Tools\n\n| Tool | Description |\n|---|---|\n| `list_entries` | List entries with filtering by view (`inbox`/`overdue`), period, date, status, kind, collection, or tag. Cursor pagination. |\n| `create_entry` | Create a task, note, or event. Omit `start` to place in inbox. |\n| `get_entry` | Get a single entry by UUID. Optionally expand collection/tags. |\n| `update_entry` | Update an entry's title. |\n| `delete_entry` | Soft-delete an entry. |\n| `list_collections` | List all collections. Filter by archived status. |\n| `get_collection` | Get a single collection by UUID. |\n| `list_tags` | List all tags. Filter by archived status. |\n| `get_tag` | Get a single tag by UUID. |\n\n## Setup\n\n### Get a Bullet API token\n\nGo to [bullet.to](https://bullet.to) → Settings → API. Tokens start with `blt_`.\n\n### Claude Desktop\n\nAdd to `~/Library/Application Support/Claude/claude_desktop_config.json` (macOS) or `%APPDATA%\\Claude\\claude_desktop_config.json` (Windows):\n\n```json\n{\n  \"mcpServers\": {\n    \"bullet\": {\n      \"command\": \"npx\",\n      \"args\": [\"-y\", \"@davebream/bullet-mcp\"],\n      \"env\": {\n        \"BULLET_API_TOKEN\": \"blt_your_token_here\"\n      }\n    }\n  }\n}\n```\n\n### Claude Code\n\n```bash\nclaude mcp add bullet -e BULLET_API_TOKEN=blt_your_token_here -- npx -y @davebream/bullet-mcp\n```\n\n### VS Code\n\nOpen MCP config (`Ctrl+Shift+P` → \"MCP: Open User Configuration\"):\n\n```json\n{\n  \"servers\": {\n    \"bullet\": {\n      \"command\": \"npx\",\n      \"args\": [\"-y\", \"@davebream/bullet-mcp\"],\n      \"env\": {\n        \"BULLET_API_TOKEN\": \"blt_your_token_here\"\n      }\n    }\n  }\n}\n```\n\n### Cursor\n\nAdd to `~/.cursor/mcp.json`:\n\n```json\n{\n  \"mcpServers\": {\n    \"bullet\": {\n      \"command\": \"npx\",\n      \"args\": [\"-y\", \"@davebream/bullet-mcp\"],\n      \"env\": {\n        \"BULLET_API_TOKEN\": \"blt_your_token_here\"\n      }\n    }\n  }\n}\n```\n\n## Development\n\n```bash\nbun install              # install dependencies\nbun run test             # run all tests\nbun run lint             # biome lint + format check\nbun run typecheck        # type-check\nbun run build            # compile to dist/\nbun run generate         # regenerate types from OpenAPI spec\n```\n\n### How it fits together\n\n```\nspec/openapi.json              ← source of truth (Bullet API contract)\n  ↓ bun run generate\nsrc/client/types.generated.ts  ← auto-generated types (don't edit)\nsrc/client/types.ts            ← re-exports for convenience\nsrc/client/api.ts              ← typed HTTP client\nsrc/tools/definitions.ts       ← Zod schemas for MCP tool inputs\nsrc/tools/entries.ts           ← pure handlers: (client, params) → string\nsrc/tools/collections.ts\nsrc/tools/tags.ts\nsrc/tools/format.ts            ← pure formatters\nsrc/index.ts                   ← MCP server wiring (only file with side effects)\n```\n\nTool handlers are pure functions — pass in a client and params, get a string back. Tests use stub clients, no HTTP mocking.\n\n### Git hooks\n\n[Lefthook](https://github.com/evilmartians/lefthook) runs biome + gitleaks on commit, typecheck + tests on push:\n\n```bash\nlefthook install\n```\n\n## Debugging\n\nTest tools interactively with [MCP Inspector](https://modelcontextprotocol.io/docs/tools/inspector):\n\n```bash\nBULLET_API_TOKEN=blt_xxx npx @modelcontextprotocol/inspector node dist/index.js\n```\n\n## License\n\n[MIT](LICENSE)\n","readmeFilename":"README.md"}