Docs
On this page
Last updated 2026-07-07 API version v1

Connect InvesTeam to Claude

To connect InvesTeam to Claude, add the InvesTeam MCP server to your client's config with your hfk_ key, then prompt Claude to create a brief and confirm it returns a session_id. Claude is the primary MCP client, and the setup is a config paste plus one verification call. Output is decision-support analysis, not investment advice.

How do I get a key for Claude?

You use the same hfk_… programmatic API key as the HTTP API; the MCP server forwards it to the API on every call. You need the pipeline:write scope to create a brief and pipeline:read to poll it. Issue and manage keys as described in Authentication & API Keys — the key is an application credential you control, unrelated to InvesTeam's keyless GCP infrastructure.

How do I add InvesTeam to Claude?

Add the InvesTeam MCP server to Claude's config, giving it the server URL and your key as a Bearer header. The block below is a single-language JSON config — it is not affected by the code-language toggle.

json
{
  "mcpServers": {
    "investeam": {
      "url": "https://mcp.investeam.io",
      "headers": { "Authorization": "Bearer hfk_your_key_here" }
    }
  }
}

Replace hfk_your_key_here with your key. The InvesTeam server speaks streamable-HTTP, so Claude Desktop and Claude Code both connect over the same URL. Restart the client (or reload its MCP servers) so it discovers the InvesTeam tools.

The two most common first-run failures are a wrong endpoint URL and a missing or under-scoped key. Confirm the server URL exactly, and confirm your key carries pipeline:write, before you retry. A missing key surfaces as an unauthorized result with no upstream call made.

How do I verify the connection works?

Prompt Claude to create a brief — for example, "Create an investment brief on whether NVDA is a buy right now." Claude calls the create_brief tool, which returns a response with a session_id and a status. That returned id is your first success.

json
{
  "session_id": "sess_abc123",
  "status": "needs_clarification"
}

The status is one of rejected (off-mandate — Claude should read the message), needs_clarification / awaiting_answers (Claude answers with answer_clarifications), or completed (the brief is ready). Treat an unknown status value as non-terminal and keep polling.

How does Claude finish the brief?

If the brief needs clarification, Claude answers with answer_clarifications, then polls get_brief every two to three seconds until the status is completed or rejected. A 404 on get_brief means the id is unknown or foreign (not_found) — not "not ready" — so Claude should not retry a bad id. The Agent Patterns guide covers the full loop, cadence, and terminal states.

What's next?

See the MCP Tool Catalog for every tool and its backing endpoint, and Agent Patterns for the submit→poll loop. Connecting a different client? See Connect Other Clients. Prefer plain HTTP? The API Quickstart runs the same pipeline in code.