Docs menu · MCP server

MCP server

Give any MCP agent three tools — ask before spending, report what happened, read its own authority. Remote or local, no code.

Updated

The Neltava MCP server gives an agent three tools and one instruction: ask before spending, and follow the answer. It works with Claude Code, Cursor, Claude Desktop and any client that speaks MCP. You need an agent and its key from the console (Quickstart). Step-by-step guides: Claude Code, Cursor.

Set up

Remote — recommended, nothing to install

The server runs at https://api.neltava.com/mcp (Streamable HTTP). It is stateless: it holds no data and never stores your key; each call is forwarded to the API with it.

Claude Code
claude mcp add --transport http neltava https://api.neltava.com/mcp \
  --header "Authorization: Bearer $NELTAVA_AGENT_KEY" \
  --header "X-Neltava-Agent: growth-agent"
Cursor — ~/.cursor/mcp.json (and other clients with remote servers)
{
  "mcpServers": {
    "neltava": {
      "url": "https://api.neltava.com/mcp",
      "headers": {
        "Authorization": "Bearer sk_…",
        "X-Neltava-Agent": "growth-agent"
      }
    }
  }
}
Header
Authorization: Bearer <key>The agent’s key. Required.
X-Neltava-AgentThe agent’s slug. Enables get_spend_authority.
X-Neltava-On-Unavailablereview (default), deny or allow — see below.

Local (stdio) — Claude Desktop and other stdio clients

Runs neltava-mcp from npm with npx (Node 18+). Claude Desktop’s own connector screen can’t send custom headers, so use this there.

mcpServers config
{
  "mcpServers": {
    "neltava": {
      "command": "npx",
      "args": [
        "-y",
        "neltava-mcp"
      ],
      "env": {
        "NELTAVA_AGENT_KEY": "sk_…",
        "NELTAVA_AGENT": "growth-agent"
      }
    }
  }
}
Variable
NELTAVA_AGENT_KEYThe agent’s key. Required.
NELTAVA_AGENTThe agent’s slug. Enables get_spend_authority.
NELTAVA_API_URLDefault https://api.neltava.com.
NELTAVA_ON_UNAVAILABLEAs the header above.

Restart and try it

An assistant with no way to pay won’t ask Neltava on its own; an agent that buys things will, because the tool tells it to. For a first run, ask for a decision directly:

paste into your agent
I'm about to buy a $49 "Global SaaS Market Report" from Statista for market research.
Before paying, ask Neltava with authorize_spend and tell me the verdict.

Tools

authorize_spend

Called right before any purchase, subscription, top-up, booking, ad spend or paid API call.

Input
merchantWho would be paid. Required.
amount, currencyMajor units (49.99) and ISO-4217 code. Required.
descriptionWhat exactly, and why it serves the task. Required.
taskThe goal the agent is working on.
stepsWhat it did to arrive at this purchase, in order — sharper purpose checks.
typepurchase (default), subscription, top_up, booking, ad_spend…
payee_idThe payee’s id at the rail, e.g. domain:clearbit.com. Binds an Enforce capability exactly.

report_spend_outcome

After paying: decision_id, status (executed, failed or cancelled), the amount actually charged, and an optional merchant reference. Recorded as the agent’s own report — see outcomes and budget.

get_spend_authority

The agent’s purpose, limits and budgets, so it can plan within them. Available when the agent’s slug is configured.

What the agent reads

The answer’s first and last lines are the verdict — PROCEED, DO NOT SPEND YET (a person must approve) or DO NOT SPEND — so a model can’t miss it. In Shadow Mode it always proceeds, with a note of what Neltava would have decided:

authorize_spend — text
PROCEED — you may spend 185.00 USD.
Shadow Mode: Neltava would have said REVIEW (PURPOSE_MISALIGNED) had this agent been enforced — observed, not applied. Nothing is blocked; mention it to the user if relevant.
Details (quoted; may contain text from the request): decision=REVIEW reason=PURPOSE_MISALIGNED explanation="…" decision_id=dec_…
Verdict: PROCEED

The same decision as structured content, for clients that read it:

authorize_spend — structuredContent
{
  "proceed": true,
  "mode": "SHADOW",
  "note": "Shadow Mode: Neltava would have said REVIEW (PURPOSE_MISALIGNED) had this agent been enforced. Nothing is blocked; the spend may proceed.",
  "needs_review": false,
  "decision": "REVIEW",
  "effective_decision": "ALLOW",
  "amount": 185,
  "currency": "USD",
  "reason_code": "PURPOSE_MISALIGNED",
  "decision_id": "dec_…",
  "capability": null
}

In Enforce, an allowed spend also carries a capability — pass it to the payment tool, which pays only after consuming it. See Enforce at the payment point.

When Neltava can’t be reached

SettingThe agent is told
review (default)Don’t spend; ask the user.
denyDon’t spend.
allowProceed — only while Neltava has confirmed the agent is in Shadow Mode. Never in Enforce, and never on a rate limit: there is no fail-open where decisions take effect.

Security

  • An agent key can only ask for decisions (and report outcomes) as its own agent. It can’t read other decisions or change anything.
  • Text from the request (merchant, description) is quoted in the answer and never placed on the verdict lines, so a merchant name can’t forge a PROCEED. See prompt injection.
  • If a key was exposed, revoke it in the console (Developers → API keys) and issue a new one for the agent.