Skip to main content
Glama
schneidavie

Fund Momentum MCP Server

Fund Momentum: the agentic pulse of Venture Capital

Agentic fundraising intelligence for founders and emerging fund managers · 1100+ tracked VC funds · 608 disclosed LPs · LP Radar · Remote MCP server with pay-per-call

fundmomentum.vc · MCP Docs · LP Radar · FM15 Ranking · Smithery

Try it now: no key, no signup

search_funds, get_fund, get_changes and check_lp_coverage answer 10 calls per caller per UTC day between them with no credential at all. Paste this:

curl -s https://fundmomentum.vc/_api/mcp \
  -H "Content-Type: application/json" \
  -d '{"jsonrpc":"2.0","method":"tools/call","params":{"name":"search_funds","arguments":{"stage":"seed","country":"Germany","limit":5}},"id":1}'

Real data, no card, no email address. Quota headers, the free key and the other four tools: MCP Server.

New: LP data over MCP. check_lp_coverage tells you, free and with no key, how many limited partners match a country and LP type. search_lps returns the LP records themselves for LP Radar subscribers (€199/month or €1,499/year, card checkout). See LP Radar over MCP.


Related MCP server: Elliot Foster – Brazilian Funds

What is Fund Momentum?

Fund Momentum is agentic fundraising intelligence for founders and emerging fund managers. It tracks 1100+ VC funds, every one of which raised capital since September 2024. Around 300 fund closings are covered as primary research, not scraped rows. LP Radar maps 608 disclosed LPs and shows which of them back Fund I and II managers.

Your agent queries it over a remote MCP server. A founder asks Claude or ChatGPT who backs their round. An autonomous agent registers itself and pays per call.

Why it exists: a fund list ages fast. Funds stop deploying, GPs move on and theses drift. A fund that just closed has capital to deploy, so that is where Fund Momentum starts. Every fund profile carries a provenance block naming its source, the date it was last checked and a confidence level.

The counts above are generated, not typed. scripts/sync-counts.sh reads a live SELECT COUNT(*) from the server card and rounds the fund count down, so the published figure is always an understatement rather than a stale boast. See Keeping the numbers honest.


MCP Server

Connect Claude, Cursor, or any MCP-compatible AI directly to Fund Momentum.

The keyless trial

search_funds, get_fund, get_changes and check_lp_coverage answer 10 calls per caller per UTC day between them, with no credential at all. No signup, no card, no key. This is the front door: see real data before you decide anything. The curl at the top of this README is a complete, working call.

Every response carries a _meta block telling you where you stand:

"_meta": {
  "auth": "keyless_trial",
  "calls_used": 1,
  "calls_limit": 10,
  "calls_remaining": 9,
  "resets_at": "2026-08-26T00:00:00.000Z"
}

The keyless trial covers those four tools. Keyless get_changes looks back at most 7 days and answers since_floor_applied: true when it shortens your window; a free key widens that to 30 days. See Incremental sync.

Access without registration

There is no signup wall. An agent can discover this server, pay for what it needs and get data with no human, no account and no email at any point.

Access

How you get it

What works

Limits

Keyless

Nothing. Just call the endpoint.

search_funds, get_fund, get_changes (7-day window), check_lp_coverage

10 calls/caller/UTC day

Anonymous key

POST {"agent_name":"..."} to /_api/agent/register

All six fund tools on credits. 25 free credits on creation.

3 new keys per IP, 10 per /24, per day

Paid, inline

Nothing. Call a Pro tool, get 402, pay, retry.

All six fund tools, priced per call

€1,000 per payer per day

Paid, prepaid

POST /_api/agent/credits/topup, pay the challenge

All six fund tools on credits

€5 / €20 / €50 / €100

Linked (optional)

POST /_api/agent/link with an email

Everything above, plus invoices and a dashboard

Grants no extra access

Per-call prices are not repeated here, because a typed price drifts. Each tool states its own in its description, and /_api/mcp-tools is generated from the live tool definitions.

Getting a key

Both routes are free and take under a minute.

Humans: fundmomentum.vc/mcp documents the MCP plans and the client setup; you subscribe and copy the key itself at fundmomentum.vc/pricing.

Autonomous agents: no registration and no email are required at all. There is no email field on this endpoint.

curl -s https://fundmomentum.vc/_api/agent/register \
  -H "Content-Type: application/json" \
  -d '{"agent_name":"your-agent-name"}'

201 Created:

{
  "api_key": "fm_agent_...",
  "agent_id": "agt_...",
  "status": "registered",
  "agent_credits": 25,
  "free_credits_granted": 25,
  "cost_per_free_call": "€0.01",
  "credits_never_expire": true,
  "tools_on_credits": ["search_funds", "get_fund", "get_changes"],
  "tools_paid_per_call": {
    "get_fund_signals": "…",
    "get_gp_profile": "…",
    "match_startup": "…"
  },
  "payment": {
    "protocol": "mpp",
    "methods": ["tempo_usdc"],
    "topup_endpoint": "/_api/agent/credits/topup",
    "daily_spend_limit": "€1000.00"
  },
  "link_email_endpoint": "/_api/agent/link",
  "mcp_endpoint": "https://fundmomentum.vc/_api/mcp"
}

No payment, no approval, no human: an agent registers and makes a useful call in the same second. The key is returned once. Only a SHA-256 hash is stored, so a lost key cannot be recovered.

operator_url and contact are optional free text and are never verified. Send an email and it is ignored with a note rather than rejected, so callers written against the old contract keep working.

The 25 credits work on all six fund tools. Free tools cost 1 credit (€0.01); the Pro tools are priced per call, as listed in /_api/mcp-tools. check_lp_coverage never costs a credit, and search_lps is never sold on credits. See LP Radar over MCP.

Why there is no email step

An earlier release gated the Pro tools behind a clicked verification link. That was wrong for three reasons, and it is gone.

Most agents cannot read email, so it put a human step inside a flow that promises "register and call in the same second". It shared the users table with the human Google sign-up, so a person who had signed in with Google and then called this endpoint got back status: "existing", a null API key, zero credits, and a response claiming all six tools were available. And it bought almost no protection anyway: throwaway addresses are free.

Access control is pricing. Pro data costs money per call, always, with no free path. Identity is the API key or, for inline payments, the paying wallet.

New keys are capped at 3 per IP and 10 per /24 per UTC day. Over that, registration answers 429 naming both escape routes rather than leaving you stuck: the keyless tools, and inline payment, neither of which needs a key.

Every agent-tier response then carries its balance in _meta:

"_meta": {
  "credits_remaining": 24,
  "cost_per_call": "€0.01",
  "billing": "per_call"
}

buy_more is added to that block once credits_remaining drops below 100.

Paying, with no account at all

Autonomous machine payment is live on Tempo mainnet. A Pro tool called with no key whatsoever answers HTTP 402 carrying a payment challenge over MPP. Pay it in USDC on Tempo (chain 4217), retry, and you get the data plus a receipt. Nothing is registered and no account exists at any point.

curl -fsSL https://tempo.xyz/install | bash
tempo wallet login
tempo request -X POST --json '{"jsonrpc":"2.0","method":"tools/call","params":{"name":"get_fund_signals","arguments":{"slug":"speedinvest-africa-fund"}},"id":1}' https://fundmomentum.vc/_api/mcp

The same flow tops up a key, so an agent never has to stop:

curl -s -X POST https://fundmomentum.vc/_api/agent/credits/topup \
  -H "X-API-Key: fm_agent_..." -H "Content-Type: application/json" \
  -d '{"amount_eur":20}'

amount_eur is 5, 20, 50 or 100. €20 buys 2,000 credits. The daily ceiling is checked before a challenge is issued, so you are never invited to pay for something that would then be refused. Spending is capped at €1,000 per payer per UTC day.

Prices are quoted in EUR and settle in USDC, converted at the ECB daily reference rate plus a 1.5% buffer for intraday movement and fees. There is no rounding up to the cent: €0.01 charges $0.0118, not $0.02.

The challenge arrives on a standard WWW-Authenticate: Payment ... header, and a paid response carries a Payment-Receipt header with the on-chain reference.

Over MCP the shape is different, because it has to be. An MCP client ignores the body of a 402: it decides on the status line. So a caller that speaks MCP over Streamable HTTP (an mcp-method header, or an Accept listing both application/json and text/event-stream) gets HTTP 200 carrying a JSON-RPC error instead: error.code -32042, the challenges in error.data.challenges, and the request id echoed back. Pay and retry with the credential in params._meta["org.paymentauth/credential"]; the receipt comes back in result._meta["org.paymentauth/receipt"]. A credential that does not verify answers -32043, never -32042, so you are not asked to pay twice.

Checked by the protocol's own validator against this server:

$ mppx validate https://fundmomentum.vc
Summary: 15 passed, 0 failed, 1 skipped

Everything structural passes, including the mainnet token and recipient addresses. The one skip is the payment step itself: the validator provisions a funded wallet on testnet only, and mainnet has no faucet. That step passes on the identical testnet deployment, with a real on-chain payment and a verified receipt (25/25).

Out of credits used to surface as JSON-RPC error -32001. It is now an HTTP 402. Update any handler matching the old code.

If you would rather not pay at all, the fallback is real: drop the X-API-Key header and search_funds, get_fund, get_changes and check_lp_coverage still answer 10 calls per day with no credential.

Linking an email (optional)

POST /_api/agent/link with {"email":"..."} attaches a key to a human account for invoices and a dashboard only. It grants no access and changes no credits. An address already verified, a Google sign-in say, links immediately and no mail is sent. This endpoint and /_api/agent/link/resend (3/day) are the only places the agent path ever sends email.

Timeouts and retries

Retrying never costs twice. The same call returns the same challenge, never a new one. Once that challenge is paid, the same call returns the stored result free. A timeout followed by a retry cannot produce two payments.

The boundary is derived from the payer, the tool and the canonical arguments, so you do not have to set anything. Argument order does not matter: keys are sorted before comparison. To choose the boundary yourself:

{ "params": { "_meta": { "vc.fundmomentum/idempotency-key": "your-id" } } }

An agent does not need this README to find that out: every challenge carries the same guarantee in error.data.idempotency, with guaranteed, meta_key, meta_key_optional and a note.

Set your timeout generously for match_startup. Three to ten seconds is normal, not a hang: it reasons over every tracked fund. The retry guard is a safety net, not a substitute for a sensible timeout.

Response

Meaning

Were you charged?

-32042

Payment required. Challenge in error.data.challenges

No

-32043

Credential failed verification

Possibly yes. Send us the transaction hash and we settle it by hand

-32000 with error.data.error_reason: "not_found" and checked_before_payment: true

Slug does not exist, matches several funds (they are listed, none is picked), or that fund has no published signals

No, never

-32602 with error.data.error_reason: "invalid_args" and checked_before_payment: true

Unknown, missing or malformed parameter

No, never

A wrong slug or a bad argument is refused before any payment. The message names the closest real slugs, or the parameters the tool accepts.

Near-miss names are resolved only when there is no doubt. get_fund, get_fund_signals and get_gp_profile accept a name that differs from the real slug only in case or spacing, or that is a hyphen-boundary prefix of exactly one real slug (speedinvest-africa resolves to speedinvest-africa-fund). It is served and the result carries resolved_from (and _meta.resolved_from / resolved_to) so you learn the real slug. A name that matches several funds (speedinvest) is listed, never guessed; no match is not_found. Resolution runs before any payment challenge, so a wrong name is never charged. Calling search_funds first is still the right way to get a slug.

Refusal messages (keyless limit, no key, wrong tier, payment required, LP Radar needed) open with the route for a person, a free key at fundmomentum.vc/pricing, and then the route for automated callers. Every structured field in error.data / _meta is unchanged; parse those, not the prose.

What each tool costs is in its own description. /_api/mcp-tools is generated from the live tool definitions, so it is always the current price. The same section is on fundmomentum.vc/mpp-wallet as section 5.

Quick Setup (Claude Desktop)

Add to your claude_desktop_config.json:

{
  "mcpServers": {
    "fund-momentum": {
      "url": "https://fundmomentum.vc/_api/mcp",
      "headers": {
        "X-API-Key": "YOUR_API_KEY"
      }
    }
  }
}

Restart Claude Desktop. Done. Drop the headers block entirely to run on the keyless trial.

Example Queries

"Which seed funds in DACH invest in B2B SaaS and are deploying now?"
"What is Speedinvest bullish on right now?"
"Match my startup: AI-native fintech, seed stage, raising €3M, Vienna"
"What should I know before pitching Point Nine Capital?"
"Which funds were added or updated since last Monday?"

Available Tools (8)

Tool

Title

Tier

Description

search_funds

Search VC funds

Free

Search actively deploying funds by stage, country, industry

get_fund

Get fund profile

Free

Full fund profile with GP intelligence and a provenance block

get_changes

Get changed funds since

Free

Only the funds that changed since a timestamp, for incremental sync

get_fund_signals

Get fund investor signals

Pro

Bullish/contrarian signals, deployment status, thesis tags

get_gp_profile

Get General Partner profiles

Pro

Individual GP profiles and backgrounds

match_startup

Match startup to funds

Pro

AI-powered fund matching based on startup description

check_lp_coverage

Check LP coverage

Free, keyless

How many LPs match a country and LP type. Counts only, never a name

search_lps

Search LP records

LP Radar

LP records (name, type, HQ, focus, website, emerging-manager backing), max 25 per call, unlimited calls

All eight tools are read-only and non-destructive, and advertise it: readOnlyHint: true, destructiveHint: false, idempotentHint: true, openWorldHint: false. An agent can call any of them without a confirmation prompt. Nothing here mutates state.

search_funds and get_fund were previously documented as Starter. They are Free.

LP Radar over MCP

LP data is a separate product with its own entitlement, not a rung above Pro.

  • check_lp_coverage is free. No key, no credit, also on the keyless trial. It answers "do you cover my geography and LP type" with counts only: never a name, website or commitment. Counts under 5 show as "<5", zero as "none". Call it first.

  • search_lps needs LP Radar on the caller's own account key: €199/month or €1,499/year, same access on both, cancel any month. Unlimited calls, up to 25 records per call; a larger limit is rejected, not clamped.

  • Not sold per call. LP records are never available on agent credits, over MPP or on the keyless trial. Without LP Radar, search_lps answers error_reason: "lp_access_required" with the free coverage count and the purchase link, never a payment challenge.

  • Buying it. Self-serve card checkout on fundmomentum.vc/lp-radar, no account needed beforehand. Access and an API key switch on right after payment under the checkout email; a new account is created if none exists and a welcome email carries the setup link. Manage or cancel in the Stripe billing portal.

  • What stays in the web app. Commitment history, fund sizes, dates and allocation patterns are not served over MCP. There is no LP export on any tier.

Incremental sync: use get_changes, not a polling loop

Do not re-run search_funds on a schedule. get_changes exists for exactly that job and is dramatically cheaper.

The loop:

  1. Call get_changes with a since timestamp. Omit since to get the last 7 days.

  2. Keep the next_since and etag from the response.

  3. Next poll, send next_since as since and the previous etag as if_none_match.

  4. If nothing changed in that window, the reply is unchanged: true with zero rows: a few bytes instead of a full page.

{
  "jsonrpc": "2.0",
  "method": "tools/call",
  "params": {
    "name": "get_changes",
    "arguments": {
      "since": "2026-08-20T00:00:00Z",
      "if_none_match": "\"2126d79bb6487457b97d8b05eb84253e\"",
      "limit": 50
    }
  },
  "id": 1
}

since accepts an ISO 8601 timestamp or a unix epoch in milliseconds as a string. limit is 1–200, default 50.

A changed window answers with the cursor fields plus the rows:

{
  "since": "2026-08-20T00:00:00.000Z",
  "since_defaulted": false,
  "next_since": "2026-08-25T16:00:21.418Z",
  "returned": 2,
  "total_changed": 4,
  "has_more": true,
  "etag": "\"2126d79bb6487457b97d8b05eb84253e\"",
  "changes": [
    {
      "slug": "cloudberry-ventures-deeptech-fund",
      "name": "Cloudberry Ventures DeepTech Fund",
      "country": "United Kingdom",
      "fundingStage": "seed",
      "fundSize": "€50M",
      "change_type": "signal_updated",
      "changed_at": "2026-08-24T04:00:22.242Z",
      "confidence": "high",
      "url": "https://fundmomentum.vc/funds/cloudberry-ventures-deeptech-fund"
    }
  ]
}

When has_more is true, call again with the returned next_since before sleeping.

Plain HTTP alternative. The same data is on GET /_api/changes, with the cursor as an ordinary conditional request. Keep the ETag response header and send it back as If-None-Match. An unchanged window answers 304 Not Modified with an empty body.

API Reference

Endpoint: POST https://fundmomentum.vc/_api/mcp Protocol: JSON-RPC 2.0 over streamable HTTP Server card: /_api/well-known/mcp/server-card Auth: X-API-Key header, or Authorization: Bearer <key>, or nothing at all on the keyless trial

import requests

r = requests.post(
    "https://fundmomentum.vc/_api/mcp",
    headers={"X-API-Key": "YOUR_KEY", "Content-Type": "application/json"},
    json={
        "jsonrpc": "2.0",
        "method": "tools/call",
        "params": {
            "name": "search_funds",
            "arguments": {"stage": "seed", "country": "Germany", "limit": 10}
        },
        "id": 1
    }
)
print(r.json())
const r = await fetch("https://fundmomentum.vc/_api/mcp", {
  method: "POST",
  headers: { "X-API-Key": "YOUR_KEY", "Content-Type": "application/json" },
  body: JSON.stringify({
    jsonrpc: "2.0",
    method: "tools/call",
    params: { name: "get_fund_signals", arguments: { slug: "speedinvest-africa-fund" } },
    id: 1
  })
});
const data = await r.json();

More in examples/developers.md and examples/founders.md.


GP Signal Profiles

Beyond fund size and portfolio, Fund Momentum extracts how each GP actually thinks:

  • Thesis Tags: specific investment focus areas

  • Bullish Signals: what they're excited about right now

  • Contrarian Signals: where they're betting against the consensus

  • Deployment Score: how actively they're writing checks

  • Founder Dos & Don'ts: how to pitch this specific fund

Built from primary research: GP blog posts, fund websites, LinkedIn, published interviews. Not scraped summaries.


FM15: Founder Alignment Ranking

The FM15 is our semi-annual ranking of 15 emerging VC managers, scored on four dimensions:

Dimension

What we measure

LP Trust Signal

LP quality, re-ups, fund size trajectory

Early Track Record

Portfolio performance, notable exits

Thesis Sharpness

Specificity and differentiation of investment focus

Founder Alignment

GP background, check size fit, post-investment support

No AUM sorting. No paid inclusion. Primary research only.

→ View FM15 H1 2026


MCP Pricing

These tiers cover the MCP server and API only.

Agents are not on these plans. They pay per call, at the price each tool states in /_api/mcp-tools, with no subscription and no account. See Access without registration above. The monthly plans below are for people.

Tier

Price

API Calls

Tools

Agents (per call)

per tool

Unmetered, pay as you go

All six fund tools, no account needed

Keyless trial

€0, no signup

10/day per caller

search_funds, get_fund, get_changes (7 days back), check_lp_coverage

Free

€0

100/mo

search_funds, get_fund, get_changes

Starter

€9/mo

1,000/mo

search_funds, get_fund, get_changes

Pro

€29/mo

10,000/mo

All six fund tools incl. signals

Enterprise

Custom

Unlimited

All six fund tools, custom contract & SLA

LP Radar

€199/mo or €1,499/yr

Unlimited

search_lps (check_lp_coverage is free on every row). Separate subscription, card checkout

The keyless, Free and Pro rows are generated from the server card. The Starter and Enterprise rows are still typed by hand. The card exposes no tier block for them, so treat fundmomentum.vc/pricing as authoritative if those two ever disagree with this table.

→ MCP plans & client setup · Subscribe & get a key

Founder and investor-signal plans for the platform itself are priced separately → fundmomentum.vc/pricing


Keeping the numbers honest

Fund and LP counts, the keyless and Free allowances and the Pro price in this README are generated, not typed. scripts/sync-counts.sh reads them from the live server card and rewrites the values between the <!--fm:*--> marker pairs, plus version and description in server.json.

Two numbers are not covered: the Starter and Enterprise rows in the pricing table. The server card exposes authentication.free_tier and a Pro price via tools[].price, but no tier block, so there is nothing to read them from. They stay hand-typed until the card grows one. See the note at the top of scripts/sync-counts.sh for how to wire them up when it does.

The fund count is published rounded down to the nearest hundred (1000+ today), matching the site's own copy and the server card's note that marketing figures round the live count down. It still moves on its own as the index grows; it is simply never ahead of the truth.

scripts/sync-counts.sh
scripts/sync-counts.sh --check

.github/workflows/sync-counts.yml runs it weekly and commits any drift. .github/workflows/publish-mcp.yml runs it before every registry publish, so a release can never ship a stale count.

To sync a number in a new spot, wrap it in a marker pair and it is picked up on the next run. The markers are invisible in rendered Markdown.



Maintained by Michael Schneider · Vienna, Austria

Related MCP Connectors

Related MCP Servers

  • A
    license
    A
    quality
    D
    maintenance
    Give your AI agent access to 60M+ companies and 300M+ verified contacts. Enrich leads, find work emails, discover tech stacks, and identify buying intent — directly from Claude, Cursor, Windsurf, or any MCP-compatible AI agent.
    11
    26 npm
    MIT
  • A
    license
    Not graded
    quality
    D
    maintenance
    Brazilian investment-fund analytics for AI clients via the Model Context Protocol (MCP). Connect Claude Desktop, Cursor, ChatGPT, or any MCP-compatible client to query 30,000+ Brazilian investment funds: daily NAV, complete holdings (CDA), fund-of-funds look-through, portfolio overlap analysis, and your personal favorites/watchlist.
    MIT
  • A
    license
    A
    quality
    D
    maintenance
    A Bloomberg Terminal you can talk to. Query company relationships — suppliers, customers, competitors, supply chain paths — directly from Claude, Cursor, or any MCP-compatible AI assistant.
    7
    1
    MIT
  • A
    license
    Not graded
    quality
    C
    maintenance
    Provides AI assistants with real-time, verified European funding data including open grant calls, programmes, consortium partners, VCs, and incubators, enabling natural language queries about EU funding.
    MIT