npm.io
1.0.0 • Published yesterdayCLI

tndr-mcp

Licence
MIT
Version
1.0.0
Deps
2
Size
51 kB
Vulns
0
Weekly
0

Tndr MCP Server

Connect Claude Desktop, Claude Code, Cursor, VS Code, or any MCP host to your Tndr account. Exposes your negotiation sessions, analytics, companies, deals, team, and webhooks as tools the AI can call — backed by the Tndr Platform API.

Requirements: a Tndr account on an Enterprise or Enterprise Plus plan, and an API key from Settings → API Access in the Tndr app. Node.js ≥ 20 for local (stdio) use.

Quick start

1. Get an API key

In the Tndr app: Settings → API Access → Generate key. Pick the scopes you want the AI to have:

  • Read-only preset — safe default; every get_*/list_* tool works.
  • Add write:companies / write:deals / write:webhooks to let the AI create and update records.
  • Scopes are fixed per key — to change them, create a new key.

The key is shown once. Treat it like a password.

2. Configure your MCP host

Claude Desktop — add to claude_desktop_config.json (Settings → Developer → Edit Config):

{
  "mcpServers": {
    "tndr": {
      "command": "npx",
      "args": ["-y", "tndr-mcp"],
      "env": { "TNDR_API_KEY": "tndr_..." }
    }
  }
}

Claude Code:

claude mcp add tndr --env TNDR_API_KEY=tndr_... -- npx -y tndr-mcp

Cursor / VS Code — same command/args/env shape in .cursor/mcp.json or .vscode/mcp.json.

From source (if not installing from npm):

cd mcp-server && npm install && npm run build

then use "command": "node", "args": ["<absolute path>/mcp-server/build/index.js"] in the host config.

3. Use it

Restart the host and ask things like:

  • "How am I doing on my negotiation practice?"
  • "Brief me on Acme Steel before tomorrow's call."
  • "Create a deal for the SteelCo renewal, ~$250k, closing end of Q3."

Configuration

All configuration is via environment variables (set in the host config, the process environment, or a .env file in the working directory — real environment variables win over .env).

Variable Default Purpose
TNDR_API_KEY Required. API key from Settings → API Access.
TNDR_API_URL production Platform API Override for staging/self-hosted.
TRANSPORT stdio stdio (local hosts) or http (remote, Streamable HTTP).
PORT 3100 HTTP mode listen port (Cloud Run sets this automatically).
HOST 127.0.0.1 HTTP mode bind address. The Docker image sets 0.0.0.0.
TNDR_TIMEOUT_MS 30000 Per-request timeout against the Platform API.

Tools

Every tool wraps one Platform API endpoint; the scope listed is what the API key must carry (the admin scope grants everything).

Tool What it does Scope
get_profile Profile: name, company, level, XP, negotiation style read:profile
get_subscription Plan tier, status, usage, billing period read:profile
list_sessions Sessions (Arena practice + NegoIQ real-world), filterable read:sessions
get_session One session incl. NegoIQ prep detail read:sessions
get_session_transcript Full conversation transcript read:sessions
get_session_analysis Post-session analysis, strategy comparison read:sessions
get_my_stats Arena aggregates: completed, avg score, wins/losses read:analytics
get_negoiq_stats NegoIQ aggregates + top vendors read:analytics
get_skill_breakdown Performance by difficulty, outcome, and focus read:analytics
list_companies / get_company Counterpart companies with contacts read:companies
create_company / update_company Create / partially update a company write:companies
delete_company Permanently delete a company write:companies
list_deals / get_deal Deals, filterable by company/readiness read:deals
create_deal / update_deal Create / partially update a deal write:deals
get_team / list_team_members Team overview and member stats read:team
list_team_sessions Team-wide sessions (admin/owner role required) read:team
list_webhooks Webhook subscriptions + delivery health read:webhooks
create_webhook Subscribe a URL to events (secret returned once) write:webhooks
update_webhook / delete_webhook / test_webhook Manage / ping subscriptions write:webhooks

Prompts

Reusable workflows exposed as MCP prompts (in Claude Desktop: the + / prompts menu):

  • analyze_recent_performance — coaching-style review of your recent sessions.
  • prepare_for_negotiation — prep brief (anchor, BATNA, concession plan) for a deal or company.
  • counterpart_brief — intelligence brief on a vendor: exposure, history, leverage.

Remote deployment (Streamable HTTP)

For remote use the server speaks Streamable HTTP at POST /mcp (stateless), with a health check at /healthz:

docker build -t tndr-mcp .
docker run -e TNDR_API_KEY=tndr_... -p 3100:3100 tndr-mcp

# Cloud Run
gcloud run deploy tndr-mcp --source . --set-env-vars TNDR_API_KEY=tndr_...

Security: the server performs no authentication of its own — anyone who can reach the port acts as the configured API key. Keep it on localhost, behind an authenticating proxy, or on a private network. One deployment = one Tndr user.

Troubleshooting

Symptom Fix
Every tool says "Tndr API key not configured" Set TNDR_API_KEY in the host's env block and restart the host.
"API key was rejected" Key revoked or mistyped — generate a new one in Settings → API Access.
"requires an Enterprise plan" API access is Enterprise-only; upgrade or use an Enterprise account.
"lacks the 'write:…' scope" Scopes are fixed at creation — create a new key with that scope ticked.
"rate limit exceeded" 60 req/min (Enterprise) / 300 (Enterprise Plus). Wait for the stated retry time.
Server doesn't appear in the host Check the host's MCP logs; run npx -y tndr-mcp manually — it should print running on stdio to stderr.

Development

npm install
npm run build      # tsc -> build/
npm test           # unit + in-memory MCP end-to-end tests (node:test)
npm run smoke      # spawns the built server over real stdio and exercises it
npm run smoke:http # same over Streamable HTTP
npm run dev        # run from source (tsx)

Versioning follows the Platform API: 1.x of this package tracks /v1 of the API.

Keywords