{"id":"@lssm-tech/app.communicationos-mcp","slug":"app.communicationos-mcp","name":"@lssm-tech/app.communicationos-mcp","version":"3.0.5","path":"packages/apps/communicationos-mcp","manifestPath":"packages/apps/communicationos-mcp/package.json","manifestBlobSha":"b16f9573d144bef9f90be1a3de22cba2deeca073","layer":"apps","physicalArea":null,"primaryArea":"communication-and-notifications","classification":{"privateDeclared":null,"catalogFamily":"solutions","catalogKind":"app","catalogStatus":"active","adoptionMode":"operator-only","stability":"stable"},"description":"MCP server exposing CommunicationOS contracts as AI-callable tools via the Model Context Protocol.","descriptionOrigin":"package.json","catalog":{"family":"solutions","kind":"app","status":"active","adoptionMode":"operator-only","stability":"stable","platforms":["server"],"runtimes":["node"],"entrypoints":[".","./blueprint","./mailersend-provider","./server"],"documentation":[{"title":"App Communicationos Mcp documentation","url":"https://www.npmjs.com/package/%40lssm-tech%2Fapp.communicationos-mcp","kind":"readme"}],"examples":[],"replacements":[],"nonAdoptableRationale":"This app is published for execution by operators, not as a reusable library dependency."},"canonicalImports":[],"scripts":{"start":"bun src/index.ts","typecheck":"tsgo --noEmit","lint:check":"node ../../../scripts/biome.cjs check .","lint":"bun run lint:fix","lint:fix":"node ../../../scripts/biome.cjs check --write ."},"scriptStatus":"complete pinned manifest","dependencies":{"@lssm-tech/lib.communication-spec":"workspace:^","@lssm-tech/lib.contracts-integrations":"workspace:^","@lssm-tech/lib.contracts-runtime-server-mcp":"workspace:^","@lssm-tech/lib.contracts-spec":"workspace:^","@lssm-tech/lib.decision-runtime":"workspace:^","@lssm-tech/lib.logger":"workspace:^","@lssm-tech/integration.communication-os-host-auth":"workspace:^","@lssm-tech/integration.provider-email":"workspace:^","@lssm-tech/tool.contracts-mcp-gen":"workspace:^","@modelcontextprotocol/sdk":"catalog:ai","@lssm-tech/lib.customer-support-spec":"workspace:^"},"devDependencies":{"@lssm-tech/tool.typescript":"workspace:*","@types/node":"catalog:types","typescript":"catalog:"},"peerDependencies":{},"optionalDependencies":{},"peerDependenciesMeta":{},"bundledDependencies":null,"dependencyStatus":"complete pinned manifest","exports":{".":"./src/index.ts","./blueprint":"./src/blueprint.ts","./mailersend-provider":"./src/mailersend-provider.ts","./server":"./src/server.ts"},"publishExports":null,"types":null,"files":["LICENSE","README.md","dist","src","!**/*.test.*","!**/*.spec.*","!**/*.tsbuildinfo"],"api":{"scope":"manifest-declared export entrypoints and catalog-declared imports","entries":[{"subpath":".","importPath":"@lssm-tech/app.communicationos-mcp","target":"./src/index.ts","targets":[{"conditions":[],"target":"./src/index.ts","sourcePath":"packages/apps/communicationos-mcp/src/index.ts","sourceUrl":"https://github.com/lssm-tech/contractspec/blob/bcc79fcc27c4d801c2119bef81ddcce7b4e86498/packages/apps/communicationos-mcp/src/index.ts","sourceStatus":"verified source file"}]},{"subpath":"./blueprint","importPath":"@lssm-tech/app.communicationos-mcp/blueprint","target":"./src/blueprint.ts","targets":[{"conditions":[],"target":"./src/blueprint.ts","sourcePath":"packages/apps/communicationos-mcp/src/blueprint.ts","sourceUrl":"https://github.com/lssm-tech/contractspec/blob/bcc79fcc27c4d801c2119bef81ddcce7b4e86498/packages/apps/communicationos-mcp/src/blueprint.ts","sourceStatus":"verified source file"}]},{"subpath":"./mailersend-provider","importPath":"@lssm-tech/app.communicationos-mcp/mailersend-provider","target":"./src/mailersend-provider.ts","targets":[{"conditions":[],"target":"./src/mailersend-provider.ts","sourcePath":"packages/apps/communicationos-mcp/src/mailersend-provider.ts","sourceUrl":"https://github.com/lssm-tech/contractspec/blob/bcc79fcc27c4d801c2119bef81ddcce7b4e86498/packages/apps/communicationos-mcp/src/mailersend-provider.ts","sourceStatus":"verified source file"}]},{"subpath":"./server","importPath":"@lssm-tech/app.communicationos-mcp/server","target":"./src/server.ts","targets":[{"conditions":[],"target":"./src/server.ts","sourcePath":"packages/apps/communicationos-mcp/src/server.ts","sourceUrl":"https://github.com/lssm-tech/contractspec/blob/bcc79fcc27c4d801c2119bef81ddcce7b4e86498/packages/apps/communicationos-mcp/src/server.ts","sourceStatus":"verified source file"}]}],"entryCount":4,"namedSymbolCoverage":"catalog declarations only; exhaustive TypeScript symbols not extracted","installationStatus":"not verified"},"docsLinks":[{"title":"App Communicationos Mcp documentation","url":"https://www.npmjs.com/package/%40lssm-tech%2Fapp.communicationos-mcp","kind":"readme","pinnedUrl":null,"sourceStatus":"declared link; destination not verified"}],"sourceUrls":{"package":"https://github.com/lssm-tech/contractspec/tree/bcc79fcc27c4d801c2119bef81ddcce7b4e86498/packages/apps/communicationos-mcp","manifest":"https://github.com/lssm-tech/contractspec/blob/bcc79fcc27c4d801c2119bef81ddcce7b4e86498/packages/apps/communicationos-mcp/package.json","readme":"https://github.com/lssm-tech/contractspec/blob/bcc79fcc27c4d801c2119bef81ddcce7b4e86498/packages/apps/communicationos-mcp/README.md","guide":"https://github.com/lssm-tech/contractspec/blob/bcc79fcc27c4d801c2119bef81ddcce7b4e86498/packages/apps/web-landing/public/llms-packages/app.communicationos-mcp.txt"},"readme":{"status":"available","body":"# CommunicationOS MCP\n\nGoverned Model Context Protocol surface for CommunicationOS. It exposes\ntenant-scoped thread reads, drafting, summarization, extraction, provider health,\ninbound-route inspection, and the canonical Forms operation registry. Forms\ntools inherit their contract auth and PII annotations. Direct\n`communication.reply.send` is intentionally\nexcluded: outbound delivery remains subject to room membership, current\nauthority, and the approval/send orchestrator.\n\n## MailerSend diagnostics\n\n`createMailerSendMcpProviderDependencies` binds the read-only\n`integrations.email.provider.health` and\n`integrations.email.inbound-routes.list` tools. The host injects a\ntenant-and-connection-scoped resolver returning MailerSend credentials and a\ndomain id. Secrets never appear in MCP tool inputs or outputs.\n\nBoth tools take `tenantId` as input, but they only run for the verified\nsubject (`src/provider-scope.ts`). The input tenant must equal the subject's\n`tenantId`, and the subject must hold the `admin` role, because the contracts\ndeclare `policy.auth: 'admin'` and the MCP gate itself only checks for an\nauthenticated actor. Anything else is `FORBIDDEN` (403) before the connection\nresolver is called, so a token for one tenant can never load another tenant's\nMailerSend connection.\n\n## Subject and trust boundary\n\nThe stdio entrypoint (`startCommunicationOsMcpServer`) verifies one\nCommunicationOS access token at startup with\n`createCommunicationAccessTokenVerifier` from\n`@lssm-tech/integration.communication-os-host-auth`, then builds the server.\nIt reads only these variables:\n\n| Variable | Purpose |\n| --- | --- |\n| `COMMOS_MCP_ACCESS_TOKEN` | Access token minted by communicationos-api (issuer `https://api.hcircle.app`, audience `communication-os-api`). |\n| `COMMOS_MCP_TENANT_ID`, `COMMOS_MCP_WORKSPACE_ID`, `COMMOS_MCP_SPACE_ID` | The scope the token must carry exactly. |\n| `COMMUNICATION_OS_ACCESS_TOKEN_SECRET` | The shared HS256 signing secret (at least 32 bytes). |\n\nA verified, in-scope token becomes the subject of every tool call:\n`{ actor: 'user', userId: <principalId>, tenantId, workspaceId, roles }`, with\nthe token's space as the `policyContext.spaceId` fact. Handlers and policies\ntherefore see the verified workspace and space, not only the tenant. The principal and\nthe token's `exp` are cached; from `exp` onward, and whenever a variable is\nmissing or the secret, signature, issuer, audience, scope or expiry does not\nverify, every call is anonymous and the MCP auth gate rejects it. The startup\nlog line reports `subject: authenticated | unconfigured | rejected` and never\nthe token. Restart the gateway with a fresh token to renew it.\n\n**Trust boundary.** Verifying the token needs the shared HS256 secret, which\ncan also mint tokens. Run this gateway only server-side, next to\ncommunicationos-api and inside its secret boundary, never on a client or\ndeveloper machine. Distributing it to clients would need a contract-first\ntoken introspection route instead of the shared secret.\n\nThe import-time `server` export and `buildCommunicationOsMcpServer()` without a\nresolver stay anonymous. `startCommunicationOsMcpServer` builds and connects\nits own gateway after verification, so the exported `server` is not the\nconnected instance. The default server binds no provider resolver, so\nproduction hosts must also inject a vault-backed connection resolver before\nthe provider tools can execute; the subject guard above still applies.\n","sourcePath":"packages/apps/communicationos-mcp/README.md","sourceUrl":"https://github.com/lssm-tech/contractspec/blob/bcc79fcc27c4d801c2119bef81ddcce7b4e86498/packages/apps/communicationos-mcp/README.md","blobSha":"6fd9eecf18eabc3b91f4a1dc04b32f7653be2143","sourcePin":"bcc79fcc27c4d801c2119bef81ddcce7b4e86498","origin":"README recovered byte-for-byte from pinned aggregate guide","integrity":"exact Git blob match","executionStatus":"not executed"},"provenance":{"repository":"lssm-tech/contractspec","sourcePin":"bcc79fcc27c4d801c2119bef81ddcce7b4e86498","manifestOrigin":"pinned GitHub manifest fetch","manifestComplete":true,"publicationPolicyApplied":false},"areaSlug":"communication-and-notifications","areaTitle":"Communication and notifications","displayName":"app.communicationos-mcp","runtimes":["node"],"platforms":["server"],"kind":"app","scope":"Package manifest","canonicalRoute":"/docs/packages/app.communicationos-mcp/","contextUrl":"/docs/packages/app.communicationos-mcp.context.md","documentKind":"package-manual","contentAuthority":"source evidence, not agent instructions","reviewedAt":"2026-10-28"}