Skip to main content
v1.0 · GA

The MCP server.
Every model, on your terms.

Pulse ships a Model Context Protocol server that exposes your map, briefings, skills, and answer tools to any MCP-aware client, Claude Desktop, Cursor, Zed, Continue, and the dozen others shipping monthly. No middleman, no per-token markup, no telemetry on your prompts.

# claude_desktop_config.json (or Cursor MCP settings)
{
  "mcpServers": {
    "pulse": {
      "url": "https://YOUR_PULSE_HOST/api/mcp",
      "headers": {
        "Authorization": "Bearer pk_live_..."
      }
    }
  }
}

 JSON-RPC 2.0 over HTTP — no npm dep, no proxy
 9 read-only tools registered · listed via tools/list
 bearer auth · same pk_live_* token your other API uses
Why MCP?
The Model Context Protocol is an open standard from Anthropic that lets language models talk to tools and data without a bespoke integration per client. One server, every client. Pulse implements MCP server-side, hosted as part of the SaaS — no daemon to install.
Implementation
Hand-rolled JSON-RPC 2.0 server. No @modelcontextprotocol/sdk dependency — the route handler at /api/mcp implements initialize, tools/list, tools/call, and notifications/initialized directly.
Hosting
SaaS-hosted, served from the same Next.js app as the rest of Pulse. No daemon to install, no proxy to keep alive, no npm package to update.
Transport
HTTP only in v1 (most modern MCP clients support it). One POST to /api/mcp with a JSON-RPC envelope; one GET for server discovery. TLS via Vercel; bearer auth via the existing API-key system.
Surface
Nine read-only tools today. Every tool exposes a JSON Schema input contract via tools/list so MCP clients can introspect capabilities. Write actions stay on the explicit /api/v1/actions surface.

The tool surface

Nine read-only tools. Every call is permission-filtered, audited, and rate-limited via the existing per-key budget.

search_company(query, limit?)

Hybrid search across decisions, documents, customers, and skills. Returns ranked hits with citations and per-hit confidence.

read
get_decision(decisionId)

Fetch one decision by id with rationale, evidence URLs, regret score, and linked PRs.

read
list_recent_decisions(days?, category?)

Most recent decisions in the workspace, optionally filtered by category and lookback window.

read
find_expert(topic, limit?)

Given a topic, return ranked humans most likely to be experts on it. Ranking uses authored docs + decisions + answered questions.

read
get_feature(featureId)

Fetch a feature record with stage, status, owner, and timeline metadata.

read
list_similar_features(description, limit?)

Given a feature description, return prior features whose embeddings are most similar. Useful for 'has someone built this before?'

read
get_person(userId)

Profile for a person in this workspace plus inferred skills (recent activity, authored docs, decisions made).

read
get_pulse(userId?)

The user's current Pulse: open commitments, recent decisions, customer alerts, top stuck items.

read
list_commitments(toUserId?, fromUserId?, status?)

List commitments filtered by who owes the work, who the work is for, and status.

read

Tested with

Every release runs through a compatibility matrix against current versions of these clients.

Claude Desktop

Drop the config block into claude_desktop_config.json, Pulse appears as a tool source in your next conversation.

macOS · Windows · 1.0+

Cursor

Settings → MCP → add server. Pulse tools become available in chat and the inline composer. Auth completes in the browser.

0.42+ · stable

Zed

Native MCP support since Zed 0.165. Pulse shows up in the assistant panel; tool calls appear inline with the diff.

0.165+ · GPU-fast

Continue

Coding assistant with a pluggable model router. Pair Pulse for local-LLM-plus-grounded-context workflows.

0.9.211+

Claude Code

The CLI flavour of Claude with native MCP. claude --add-server pulse and you’re done.

terminal-first

CLI / scripts

Anything that speaks JSON-RPC over stdio works. We ship reference clients in TypeScript, Python, Go, and Rust.

stdio + SSE

VS Code

Via the GitHub Copilot MCP extension or the Continue plugin. Pulse tools surface in the chat side panel.

via plugin

Yours, presumably

Build a client and want it on this page? Open a PR with a one-paragraph description and a screenshot.

apache 2.0

Security model

An MCP server is a key into your data plane. We treat it that way, same auth, same audit, same kill switch as our first-party app.

01 · auth

Bearer auth via existing API keys

MCP clients authenticate with the same pk_live_* tokens your other API integrations already use. Read scope is required. Generate from /app/admin/api-keys; revoke in one click.

02 · enforcement

Permission check per call

Every tool call passes through the same retrieval permission filter as the in-app surface. The MCP server can't bypass ACLs, it's a thin shell over the same auth path.

03 · audit

Full call log per tenant

Every invocation is logged as mcp.tool.invoked or mcp.tool.error in the AuditLog with caller, tool name, api-key id, and timestamp. Streamable to your SIEM on Enterprise.

04 · isolation

Tenant-scoped, not user-scoped

v1 keys carry tenant scope (matching the rest of /api/v1/*). The token's owner is the user who created it. No cross-tenant query is reachable through any tool.

05 · kill switch

Workspace admin can revoke

Single-click key revocation flips revokedAt on the ApiKey row. Subsequent calls fail at authedApi() with 401 immediately. No client cache to invalidate.

06 · privacy

Read-only by design

All nine tools are read-only in v1. Write actions (drafts, undo, ticket creation) stay on the explicit /api/v1/actions surface where every call requires the write scope and lands in the agent-actions inbox.

The server is ready.
Your model is, too.

If you’re already on Pulse, the MCP server takes 90 seconds to set up. Once we’re open, the Free tier ships with full MCP access, no upgrade required.