Skip to main content

MCP Server

Model Context Protocol (MCP) server for HeadshotMarketing — a thin shell over @burdenoff/mcp-libs that exposes AI-assistant tools, resources, and prompts for the HeadshotMarketing platform via GraphQL.

All module logic (auth, sandbox, the headshotmarketing product surface, and the shared platform modules) lives in @burdenoff/mcp-libs. This repository only:

  1. Builds the MCP context with HeadshotMarketing product defaults.
  2. Selects which modules to mount.
  3. Selects the transport (stdio by default, --http opt-in) and port.

Quick start

1. Install dependencies

cd ~/products/headshotmarketing/headshotmarketing-mcp
bun install

2. Configure in Claude Code

Add to your project's .mcp.json (or ~/.claude/settings.json under mcpServers):

{
"mcpServers": {
"headshotmarketing": {
"type": "stdio",
"command": "bun",
"args": ["run", "~/products/headshotmarketing/headshotmarketing-mcp/src/index.ts"],
"env": {
"BURDENOFF_ENV": "prod",
"LOG_LEVEL": "error"
}
}
}
}

3. Authenticate

On first use, ask Claude to call headshotmarketing_auth_login — it returns a verification URL and user code. Open the URL, enter the code, complete the login in the browser, then ask Claude to call headshotmarketing_auth_complete. Tokens are persisted under ~/.config/headshotmarketing-mcp/ (permissions 0o600) and auto-refresh before expiry.

Mounted modules

The shell mounts the HeadshotMarketing product module plus the shared platform modules from @burdenoff/mcp-libs:

auth, headshotmarketing, sandbox, rbac, organizations, tours, workspaces, groups, tags, files, conversations, security, integrations, channels, scheduler, export, notifications, support, products, devportal, billing, store.

Tool / resource / prompt names are product-prefixed (headshotmarketing_*).

Environment variables

Defaults point at PROD. Override per environment via HEADSHOTMARKETING_* env vars or BURDENOFF_ENV:

VariableDefaultDescription
BURDENOFF_ENVprodEnvironment selector (prod, alpha, local)
HEADSHOTMARKETING_WORKSPACE_ENDPOINThttps://graphqlworkspaces.burdenoff.com/workspaces/graphqlWorkspace gateway
HEADSHOTMARKETING_GLOBAL_ENDPOINThttps://graphql.burdenoff.com/global/graphqlGlobal gateway
HEADSHOTMARKETING_API_KEYAPI key auth (skips device code)
HEADSHOTMARKETING_ACCESS_TOKENPre-set access token
HEADSHOTMARKETING_WORKSPACE_IDPre-select workspace
HEADSHOTMARKETING_ORGANIZATION_IDPre-select organization
LOG_LEVELinfoLogging level (error/warn/info/debug)

Development

bun install           # Install dependencies
bun run dev # Dev server (stdio, hot reload)
bun run server:http # HTTP transport mode
bun run test # Run wiring tests (vitest)
bun run sanity # typecheck + lint + format + build
bun run build # Production build

Run as a binary after building:

node dist/index.js               # stdio transport
node dist/index.js --http --port 3030

Publishing

Publishing is held (pre-launch). Pushing to main runs only the green gate (lint, typecheck, test, build). Publishing @headshotmarketing/mcp to npmjs happens only via the manual release.yml workflow (workflow_dispatch or a v* tag).