Files
Tanish Manku c7373f1f5e mcp: personal tokens — landing copy, smoke leg, facts in CLAUDE.md and the handoff
The landing page tells Responses API / Messages API users where to mint a token; the smoke
script now also signs in on /connections, creates a token, uses it at /mcp, revokes it
and confirms the 401 (verified against wrangler dev + the fake). CLAUDE.md records the
verified provider dispatch rule, the storage design, and the creation rules; the handoff
notes that revoking a token cannot log its session out upstream either.

Claude-Session: https://claude.ai/code/session_01H3gfN2NCx3hBXSrZXYHUQ3
2026-08-25 00:41:44 -07:00
..

Artcraft MCP server

Cloudflare Worker at mcp.getartcraft.com. Read CLAUDE.md first — it holds the constraints, the architecture, and the working method; this file is only how to run things.

Run locally

corepack enable            # once; provides the pinned pnpm
pnpm install
cp .dev.vars.example .dev.vars

pnpm --filter @artcraft/mcp-fake-upstream dev   # fake API on http://localhost:12345
pnpm dev                                        # MCP server on http://localhost:8787

Local never talks to production: wrangler.toml's top-level block points at the fake, and src/config.ts refuses to start otherwise.

Check everything

pnpm check     # typecheck (regenerates Worker types) · lint · format · test
pnpm test      # vitest, inside workerd with the local bindings

Deploy

Deploys run from .github/workflows/mcp.yml on main once the Cloudflare secrets exist (docs/infra-request.md). Manual deploys, when needed:

pnpm deploy:preview       # workers.dev, talks to the deployed fake
pnpm deploy:production    # mcp.getartcraft.com, talks to api.storyteller.ai

Smoke against a real deployment

The only thing here that touches a real Artcraft backend. Read-only; uses the demo account.

SMOKE_BASE_URL=https://mcp.getartcraft.com SMOKE_USERNAME=… SMOKE_PASSWORD=… pnpm smoke

Runs after every production deploy and weekly (.github/workflows/mcp-smoke.yml) once the SMOKE_USERNAME / SMOKE_PASSWORD repo secrets exist. Locally it also works against wrangler dev + the fake (SMOKE_BASE_URL=http://localhost:8787, localdev1 / localdev1pass).

Layout

See CLAUDE.md → Layout.