Fund Momentum

Agentic fundraising intelligence: 950+ tracked VC funds and 751 disclosed LPs over MCP

Should I use this

Quality & Safety

A
Description quality
100%
Schema completeness
89%
Naming quality
98%
Poisoning risk
80%
Permission match
100%
Protocol compliance
100%

Findings (2)

  • HIGHTool poisoning patterns detected
  • MEDIUMTool description contains URL to non-standard domainin search_lps

Based on automated analysis of tool definitions and protocol compliance.

Context Cost

~3,516Tokens (tool definitions)
~2.1 KBTypical response size
Significant attention impact (2.75% of 128k context)

This is the approximate number of tokens consumed each time the server's tools are loaded into a model's context. Higher counts reduce the attention available for other tasks.

Install

One-Click Install

Add this to your `claude_desktop_config.json` file:

{
  "mcpServers": {
    "fund-momentum": {
      "url": "https://fundmomentum.vc/_api/mcp"
    }
  }
}

Remote endpoints

https://fundmomentum.vc/_api/mcpstreamable-http

What it can do

Tool inventory

Tools (10)

🟢 Read-only🟡 Write🔴 Delete⚪ Unknown
🟢search_funds(stage, country, industry, closed_since, limit, ...)

START HERE for any question about funds. Search actively deploying venture capital funds by stage, country, industry and recent closes. COST: free, and it works with no API key at all. Returns name, slug, country, stage, fund size, industries, the latest published close (lastCloseDate, lastCloseType) and a durable profile URL. For 'which funds just closed', pass closed_since: results then come newest close first. The `slug` in each result is what every other tool takes as input, so run this first and copy the slug rather than constructing one from a fund's name.

Input Schema

{
  "type": "object",
  "properties": {
    "stage": {
      "type": "string",
      "enum": [
        "growth",
        "late_stage",
        "pre_seed",
        "seed",
        "series_a",
        "series_b",
        "series_c"
      ],
      "description": "Funding stage. Matches every fund that invests at this stage, including multi-stage funds whose range covers it (each result lists all its stages in fundingStages). Must be one of the listed enum values (lowercase, underscores). Common spellings such as 'Pre-Seed' or 'Series A' are accepted and normalised."
    },
    "country": {
      "type": "string",
      "description": "Country of the fund's headquarters, spelled out in full (e.g. 'United States', 'United Kingdom', 'Germany'). Not an ISO code."
    },
    "industry": {
      "type": "string",
      "enum": [
        "agritech",
        "ai_ml",
        "biotech",
        "built_environment",
        "carbon_removal",
        "circular_economy",
        "climate_sustainability",
        "cloud_devops",
        "consumer_commerce",
        "creator_economy",
        "cybersecurity",
        "data_infrastructure",
        "deep_tech",
        "defense",
        "developer_tools",
        "diagnostics",
        "digital_banking",
        "digital_education_consumer",
        "digital_health",
        "digital_infrastructure",
        "ecommerce",
        "energy_tech",
        "enterprise_software",
        "evs_charging",
        "fashion_tech",
        "fem_tech",
        "fintech",
        "food_beverage",
        "food_tech",
        "gaming",
        "infrastructure_tech",
        "insur_tech",
        "iot",
        "manufacturing",
        "marketplaces",
        "med_tech",
        "mental_health",
        "mobility_transport",
        "payments_embedded_finance",
        "private_markets",
        "prop_tech",
        "robotics_automation",
        "saas",
        "semiconductors",
        "space",
        "supply_chain",
        "therapeutics",
        "travel_tech",
        "vertical_saas",
        "water_tech",
        "wealth_tech",
        "web3_finance",
        "web3_infrastructure",
        "wellness_lifestyle"
      ],
      "description": "Industry focus. Must be one of the listed enum values (lowercase, underscores), e.g. 'ai_ml', 'fintech', 'climate_sustainability'. Common spellings such as 'AI/ML', 'FinTech' or 'climate' are accepted and normalised."
    },
    "closed_since": {
      "type": "string",
      "format": "date",
      "description": "Only funds whose latest published close (first, interim or final close, or a launch) is on or after this date, ISO format YYYY-MM-DD (e.g. '2026-09-01'). Close data comes from Fund Momentum's own close coverage, each with a source URL in get_fund's last_close block."
    },
    "limit": {
      "type": "integer",
      "description": "Number of results to return. Default 10 for every caller, including agents paying with credits and subscribers, so an omitted limit never returns or bills more than 10 funds. Without a paid account the maximum is 10; a larger value is rejected, not clamped. Agents paying with credits are billed 1 credit (EUR 0.01) per fund returned, up to 150 funds per key per UTC day (a call that would exceed the remainder is refused before any charge); pass a larger limit explicitly to receive more. Starter gets up to 50 per call; Pro gets up to 250 and can page with offset. The response reports `matched` (total matches) and `truncated`."
    },
    "offset": {
      "type": "integer",
      "description": "Number of matches to skip, for paging through a large result set (use next_offset from a truncated response). Agents paying with credits and Pro plans only."
    }
  }
}
🟢get_fund(slug)

THEN: get the detailed profile of one fund, using a slug returned by search_funds. COST: free, no API key required. Every response carries a `provenance` block stating where each field came from (including per-field sources), when it was last verified, and how confident Fund Momentum is in it, plus a `last_close` block (close type, date, amount and currency as stated, source URL) when Fund Momentum has covered a close of this fund. Do not guess the slug from a fund's display name; it will usually be wrong and the call is wasted. A near-miss is resolved only when exactly one fund matches, and the result then carries `resolved_from`; a name matching several funds is listed, not guessed.

Input Schema

{
  "type": "object",
  "properties": {
    "slug": {
      "type": "string",
      "description": "The slug identifier of a fund, exactly as returned in the `slug` field of search_funds. Call search_funds first rather than guessing: slugs are not derivable from a fund's display name."
    }
  },
  "required": [
    "slug"
  ]
}
🟢get_changes(since, if_none_match, limit)

FOR STAYING CURRENT, not for discovery: return only the funds whose data changed since a given timestamp. COST: free, no API key required. With no key it reaches back at most 7 days; a free key widens that to 30 days, and a paid caller is not limited. A shortened window is declared as since_floor_applied, never silently truncated. Designed for cheap repeated polling: send the `next_since` AND the `etag` from your previous response, and an unchanged window answers with `unchanged: true` and no rows. Each row has change_type created, signal_updated or close_updated; close_updated means Fund Momentum published a new first, interim or final close for that fund and carries a last_close block with type, date, size and source URL. Use this instead of re-running search_funds on a schedule. One call here replaces a full re-crawl. Polls that return no changes are free: they do not count against quotas or credits (the per-minute pace limit still applies).

Input Schema

{
  "type": "object",
  "properties": {
    "since": {
      "type": "string",
      "description": "Lower bound, exclusive. Accepts either an ISO 8601 timestamp ('2026-08-01T00:00:00Z') or a unix epoch in milliseconds as a string ('1785955265103'). Omit to receive the last 7 days."
    },
    "if_none_match": {
      "type": "string",
      "description": "The `etag` value from your previous get_changes response. If nothing changed, the reply is a few bytes instead of a full page. This is the cheapest poll available here."
    },
    "limit": {
      "type": "integer",
      "description": "Maximum rows to return (1-200)",
      "default": 50
    }
  }
}
🟢get_fund_signals(slug)

DRILL DOWN on a fund you already identified with search_funds or get_fund. Returns investor signals: GP thesis, bullish and contrarian signals, founder dos and don'ts, deployment status and source URLs. This is the tool to use before writing an outreach message to a specific fund. COST: included in Pro, or €0.10 per call over MPP if you have no key. Roughly 96% of funds carry signals; the rest return not_found BEFORE any payment is taken, so a wrong slug is never charged for.

Input Schema

{
  "type": "object",
  "properties": {
    "slug": {
      "type": "string",
      "description": "The fund's slug, exactly as returned in the `slug` field of search_funds. Call search_funds first rather than guessing."
    }
  },
  "required": [
    "slug"
  ]
}
🟢get_gp_profile(fund_slug, gp_name)

DRILL DOWN to the people: General Partner profiles for a fund you already identified. Use this when the question is who to approach and what they personally focus on, rather than what the fund does. COST: included in Pro, or €0.10 per call over MPP if you have no key. A fund with no published GP data returns not_found before any payment. Requires a slug from search_funds.

Input Schema

{
  "type": "object",
  "properties": {
    "fund_slug": {
      "type": "string",
      "description": "The fund's slug, exactly as returned in the `slug` field of search_funds. Call search_funds first rather than guessing."
    },
    "gp_name": {
      "type": "string",
      "description": "Optional GP name to filter by"
    }
  },
  "required": [
    "fund_slug"
  ]
}
🟢match_startup(description, stage, country)

ALTERNATIVE ENTRY POINT when you do not know what to search for. Describe a startup in plain language and receive the top 10 matching funds, each with a slug, a reason and a score. Use this instead of search_funds when the brief is qualitative ('climate hardware, pre-seed, Europe') rather than a filter. Slower than the other tools, three to ten seconds, because it reasons over every tracked fund: allow for that before you time out and retry. COST: included in Pro, or €0.25 per call over MPP if you have no key.

Input Schema

{
  "type": "object",
  "properties": {
    "description": {
      "type": "string",
      "description": "Startup description (max 500 chars)"
    },
    "stage": {
      "type": "string",
      "enum": [
        "growth",
        "late_stage",
        "pre_seed",
        "seed",
        "series_a",
        "series_b",
        "series_c"
      ],
      "description": "Funding stage. Must be one of the listed enum values; common spellings are normalised."
    },
    "country": {
      "type": "string",
      "description": "Country, spelled out in full"
    }
  },
  "required": [
    "description"
  ]
}
🟢check_lp_coverage(country, lp_type)

START HERE for any question about limited partners (LPs). Answers "does Fund Momentum cover my geography and LP type" with COUNTS ONLY: how many disclosed LPs match, and how many of those have backed emerging managers. It never returns a name, slug, website or commitment. COST: free, works with no API key at all (counts against the keyless daily allowance), and is never billed to agent credits or a monthly quota. Counts below 5 are reported as "<5" and zero as "none". Call this before search_lps to find out whether LP Radar covers what you need.

Input Schema

{
  "type": "object",
  "properties": {
    "country": {
      "type": "string",
      "description": "Headquarters country of the LP, spelled out in full (e.g. 'Germany', 'United States'). Two-letter ISO codes are accepted too. LPs whose headquarters is undisclosed are never counted under a country; they are reported separately as undisclosed_hq_count."
    },
    "lp_type": {
      "type": "string",
      "enum": [
        "Pension fund",
        "Insurer",
        "Foundation / Endowment",
        "University / Research",
        "Bank",
        "Public / State institution",
        "Sovereign wealth fund",
        "Fund-of-Funds",
        "Asset manager / Investment firm",
        "Family office / Holding",
        "Corporate / Strategic",
        "Impact investor",
        "Investment vehicle",
        "Individual / Angel",
        "Institutional LP"
      ],
      "description": "LP type. Must be one of the listed values; common spellings such as 'family office', 'pension' or 'fund of funds' are accepted and normalised."
    }
  }
}
🟢search_lps(country, lp_type, backs_emerging_managers, limit)

THEN, for LP Radar subscribers: return limited partner records (name, slug, LP type, HQ country and city, geographic focus, website, emerging-manager backing, verified flag) filtered by country, LP type and emerging-manager backing, at most 25 per call. Set backs_emerging_managers=true to see only LPs that have already backed a first or second fund — for a first-time manager that is usually the only filter that matters. Requires LP Radar (EUR 199 per month or EUR 1,499 per year, https://fundmomentum.vc/lp-radar). Not available per call, on agent credits or on the keyless trial. Unlimited calls for subscribers. Use check_lp_coverage first — it is free and tells you whether the dataset covers your geography and LP type before you pay anything. Send the API key of the account that holds LP Radar. A caller without it gets error_reason "lp_access_required" together with the coverage count for its filters, never a payment challenge. website is null when no website is on record; it is never omitted.

Input Schema

{
  "type": "object",
  "properties": {
    "country": {
      "type": "string",
      "description": "Headquarters country of the LP, spelled out in full (e.g. 'Germany'). Two-letter ISO codes are accepted too."
    },
    "lp_type": {
      "type": "string",
      "enum": [
        "Pension fund",
        "Insurer",
        "Foundation / Endowment",
        "University / Research",
        "Bank",
        "Public / State institution",
        "Sovereign wealth fund",
        "Fund-of-Funds",
        "Asset manager / Investment firm",
        "Family office / Holding",
        "Corporate / Strategic",
        "Impact investor",
        "Investment vehicle",
        "Individual / Angel",
        "Institutional LP"
      ],
      "description": "LP type. Must be one of the listed values; common spellings such as 'family office' or 'pension' are accepted and normalised."
    },
    "backs_emerging_managers": {
      "type": "boolean",
      "description": "true returns only LPs that have backed an emerging manager; false returns only those that have not. Omit for both. Not available on check_lp_coverage, which reports the figure as a breakdown instead."
    },
    "limit": {
      "type": "integer",
      "description": "Records to return, 1-25. A value above 25 is rejected, not clamped.",
      "default": 10
    }
  }
}
🟢get_usage

START HERE for 'how many calls or credits do I have left'. COST: free, no API key required, and it does not count against the keyless 10 calls per day (it is subject to the per-minute pace limit like every call). Returns your tier (keyless, free, starter, pro, enterprise or agent), calls used and remaining for the current window (daily for keyless, monthly for plans), credits remaining for agent keys, when the window resets (resets_at), and your per-minute pace limit. Never charges anything.

Input Schema

{
  "type": "object",
  "properties": {}
}
🟡send_feedback(message, category, tool_name)

Tell the Fund Momentum team about a bug, a data problem or a missing feature. COST: free, no API key required, and it does not count against the keyless 10 calls per day; limited to 5 per caller per UTC day. Stores one short message and nothing else happens: nobody is notified instantly and there is no reply. Describe the problem generically and leave out names, email addresses and other personal details of third parties (founders, GPs, LPs); never paste private documents or credentials.

Input Schema

{
  "type": "object",
  "properties": {
    "message": {
      "type": "string",
      "maxLength": 1000,
      "description": "What went wrong or what is missing, in plain words. Maximum 1000 characters. No personal details of third parties."
    },
    "category": {
      "type": "string",
      "enum": [
        "bug",
        "data_issue",
        "missing_feature",
        "other"
      ],
      "description": "What kind of feedback this is. Defaults to other."
    },
    "tool_name": {
      "type": "string",
      "description": "The tool the feedback is about, if any, exactly as listed in tools/list."
    }
  },
  "required": [
    "message"
  ]
}

Community

Rate this Server

Evidence

Recent observations

verifiedversion not recorded10 tools
verifiedversion not recorded8 tools
verifiedversion not recorded8 tools
verifiedversion not recorded8 tools
verifiedversion not recorded6 tools
verifiedversion not recorded6 tools