Programscape
Startup credits, programs and perks that fit your company, from checked, sourced records.
Should I use this
Quality & Safety
Findings (1)
- LOWin compare_programs
Based on automated analysis of tool definitions and protocol compliance.
Context Cost
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": {
"programscape": {
"url": "https://programscape.com/api/mcp"
}
}
}Remote endpoints
https://programscape.com/api/mcpstreamable-httpWhat it can do
Tool inventory
Tools (12)
🟢build_route(answers)
Returns the review Programscape would show a founder, from what they have said about their company (stage, funding, the tools they use, company type and answers to earlier questions): a short read of what matters at their stage, the programs worth their time now with each one’s standing and the questions that settle it, and what can wait and why. For questions about which startup credits, programs or perks fit a company. A standing is never a statement that the founder qualifies, and a standing of “Ask {provider}” means that provider decides on request and publishes no criteria, so the founder’s step is to ask it; each amount is that program’s own figure, never a total; no provider is ranked the winner. The result says how the review can be saved.
Input Schema
{
"type": "object",
"properties": {
"answers": {
"type": "object",
"propertyNames": {
"type": "string",
"maxLength": 80
},
"additionalProperties": {
"anyOf": [
{
"type": "string",
"maxLength": 200
},
{
"type": "number"
},
{
"maxItems": 30,
"type": "array",
"items": {
"type": "string",
"maxLength": 80
}
}
]
},
"description": "The founder’s answers, keyed by question field: the shared questions’ fields or a question a review returned (e.g. \"stage\": \"seed\", \"funding\": [\"venture\"], \"currentProviders\": [\"aws\", \"openai\"], \"companyTypes\": [\"ai\"]). A fact the founder hasn’t given is left out and stays unknown."
}
},
"required": [
"answers"
],
"$schema": "https://json-schema.org/draft/2020-12/schema",
"additionalProperties": false
}🟢my_plan(planId)
Returns the founder’s saved Programscape plan: their answers, the programs they kept or set aside (a kept program says whether the founder marked it approved; an approved one carries the expiration date and award the founder entered, and its last reported balance and reminder number, when it has them), and their review as it stands today on those answers. For a returning founder asking where things stand or what to do next.
Input Schema
{
"type": "object",
"properties": {
"planId": {
"description": "Which saved plan, if the founder has more than one. Leave out for their most recent.",
"type": "string",
"format": "uuid",
"pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"
}
},
"$schema": "https://json-schema.org/draft/2020-12/schema",
"additionalProperties": false
}🔴update_my_plan(planId, answers, keep, setAside)
Saves answers and program choices to the founder’s own Programscape plan: new or changed answers, programs to keep, programs to set aside. Creates their first plan if they have none. Only what is sent changes; everything else in the plan (notes, progress, contacts) stays as it is.
Input Schema
{
"type": "object",
"properties": {
"planId": {
"description": "Which saved plan, if the founder has more than one. Leave out for their most recent.",
"type": "string",
"format": "uuid",
"pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"
},
"answers": {
"description": "New or changed answers the founder gave, keyed by question field as in a review’s answers.",
"type": "object",
"propertyNames": {
"type": "string",
"maxLength": 80
},
"additionalProperties": {
"anyOf": [
{
"type": "string",
"maxLength": 200
},
{
"type": "number"
},
{
"maxItems": 30,
"type": "array",
"items": {
"type": "string",
"maxLength": 80
}
}
]
}
},
"keep": {
"description": "Program ids the founder wants to keep in their plan.",
"maxItems": 50,
"type": "array",
"items": {
"type": "string",
"maxLength": 160
}
},
"setAside": {
"description": "Program ids the founder wants to set aside.",
"maxItems": 50,
"type": "array",
"items": {
"type": "string",
"maxLength": 160
}
}
},
"$schema": "https://json-schema.org/draft/2020-12/schema",
"additionalProperties": false
}🟡report_balance(planId, programId, amount, unit, asOf, ...)
Records the balance a provider shows for one program the founder keeps on their Programscape plan and has marked approved: the amount left, in the unit the provider reports it (US dollars, credits or requests), when it was read, and whether the founder’s own router or their assistant reported it. Optionally sets the number under which the founder wants an email reminder, in the same unit. Returns the balance as stored on the plan, with when it was read and who reported it. It is a report, never an estimate or a total, and it is never added to other programs or set against the amount awarded. Changes nothing else on the plan.
Input Schema
{
"type": "object",
"properties": {
"planId": {
"description": "Which saved plan, if the founder has more than one. Leave out for their most recent.",
"type": "string",
"format": "uuid",
"pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"
},
"programId": {
"type": "string",
"maxLength": 160,
"description": "The id of a program the founder keeps on their plan and has marked approved, for example \"firecrawl.startup-deal\"."
},
"amount": {
"type": "number",
"description": "What the provider shows as left, in `unit`, exactly as reported: dollars to the cent, or a whole number of credits or requests. Never an estimate, a conversion or a sum."
},
"unit": {
"type": "string",
"enum": [
"usd",
"credits",
"requests"
],
"description": "The unit the provider reports the balance in: usd, credits or requests."
},
"asOf": {
"description": "When the balance was read from the provider, as an ISO 8601 date and time. Leave out to mean now.",
"type": "string",
"format": "date-time",
"pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d:[0-5]\\d(?:\\.\\d+)?(?:Z|([+-](?:[01]\\d|2[0-3]):[0-5]\\d)))$"
},
"source": {
"description": "Who is reporting: \"router\" for the founder’s own credit router, \"assistant\" for an AI assistant the founder asked. Defaults to \"assistant\". Only a connection made from a program on the founder’s own computer (a loopback sign-in, as the router’s) can report as \"router\"; any other reports as \"assistant\".",
"type": "string",
"enum": [
"router",
"assistant"
]
},
"lowBalanceAt": {
"description": "Optional: the number under which the founder asked to be reminded, in the balance’s unit. Replaces the reminder number on the plan.",
"type": "object",
"properties": {
"amount": {
"type": "number",
"description": "The number under which the founder wants a reminder."
},
"unit": {
"type": "string",
"enum": [
"usd",
"credits",
"requests"
],
"description": "The same unit as the balance."
}
},
"required": [
"amount",
"unit"
],
"additionalProperties": false
},
"estimate": {
"description": "Router only (0151): how long this balance lasts at the recent pace. Shown on the plan labelled as an estimate, with when it was worked out. It never sets an expiration date or a date reminder. Leave out when there is no pace yet.",
"type": "object",
"properties": {
"daysLeft": {
"type": "integer",
"minimum": 0,
"maximum": 3650,
"description": "Whole days this balance lasts at the recent pace, as the router worked it out from its own readings."
},
"workedOutAt": {
"description": "When the router worked it out, as an ISO 8601 date and time. Leave out to mean now.",
"type": "string",
"format": "date-time",
"pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d:[0-5]\\d(?:\\.\\d+)?(?:Z|([+-](?:[01]\\d|2[0-3]):[0-5]\\d)))$"
}
},
"required": [
"daysLeft"
],
"additionalProperties": false
}
},
"required": [
"programId",
"amount",
"unit"
],
"$schema": "https://json-schema.org/draft/2020-12/schema",
"additionalProperties": false
}🟢portfolio_perks
If the founder joined a venture firm’s or studio’s perks on Programscape (for example PSL’s), returns that portfolio’s negotiated deals in the partner’s own words, labelled as the partner’s terms, and the public programs the partner points them to, with their live records.
Input Schema
{
"type": "object",
"properties": {},
"$schema": "https://json-schema.org/draft/2020-12/schema",
"additionalProperties": false
}🟢partner_perks_admin
For the admin of a venture firm’s or studio’s perks list on Programscape (for example PSL’s): what needs a look (deals due to re-confirm, linked programs that changed or closed, imported deals not yet checked), how each perk stands, how many founders joined through each invite link (counts under 3 are withheld), and when the partner’s own system last read its feed. Reads only; changes are made on the admin page.
Input Schema
{
"type": "object",
"properties": {},
"$schema": "https://json-schema.org/draft/2020-12/schema",
"additionalProperties": false
}🟡save_plan_draft(answers, keep)
Saves a founder’s review as a one-day draft and returns a link that opens it on programscape.com with their answers and kept programs in place. The founder saves it there with an email code (no password). The link works for 24 hours.
Input Schema
{
"type": "object",
"properties": {
"answers": {
"type": "object",
"propertyNames": {
"type": "string",
"maxLength": 80
},
"additionalProperties": {
"anyOf": [
{
"type": "string",
"maxLength": 200
},
{
"type": "number"
},
{
"maxItems": 30,
"type": "array",
"items": {
"type": "string",
"maxLength": 80
}
}
]
},
"description": "The founder’s answers, keyed by question field: the shared questions’ fields or a question a review returned (e.g. \"stage\": \"seed\", \"funding\": [\"venture\"], \"currentProviders\": [\"aws\", \"openai\"], \"companyTypes\": [\"ai\"]). A fact the founder hasn’t given is left out and stays unknown."
},
"keep": {
"description": "Ids of programs the founder chose to keep. Empty or left out when they chose none.",
"maxItems": 50,
"type": "array",
"items": {
"type": "string",
"maxLength": 120
}
}
},
"required": [
"answers"
],
"$schema": "https://json-schema.org/draft/2020-12/schema",
"additionalProperties": false
}🟢profile_questions
Returns the shared questions, with their answer options, that shape a founder’s review. A fact the founder hasn’t given stays unknown.
Input Schema
{
"type": "object",
"properties": {},
"$schema": "https://json-schema.org/draft/2020-12/schema",
"additionalProperties": false
}🟢search_programs(query, provider, kind, limit, capabilities)
Searches the reviewed catalog of startup credits, programs, support and product discounts across providers (AWS, Google Cloud, Microsoft Azure, OpenAI, Anthropic, NVIDIA, Stripe and more). Each result carries its official source and the date it was last checked. Can be limited to programs whose product offers an agent-tool capability (search, scrape, crawl, browser, extract, llm or sandbox): a program matches when its record lists any one of those asked for, and results keep the catalog’s own order. A result lists its capabilities when its record has been reviewed for them. A listing is not a statement that anyone qualifies.
Input Schema
{
"type": "object",
"properties": {
"query": {
"description": "Words to match against program names, headlines, products and providers. Leave empty to list everything.",
"type": "string",
"maxLength": 200
},
"provider": {
"description": "A provider id such as \"aws\", \"gcp\", \"openai\" or \"stripe\". Leave empty for every provider.",
"type": "string",
"maxLength": 40
},
"kind": {
"description": "\"programs\" for startup programs and support, \"offers\" for product discounts, \"all\" for both (the default).",
"type": "string",
"enum": [
"programs",
"offers",
"all"
]
},
"limit": {
"description": "How many results to return (default 20, at most 50).",
"type": "integer",
"minimum": 1,
"maximum": 50
},
"capabilities": {
"description": "Agent-tool capabilities, e.g. [\"search\"] or [\"scrape\", \"crawl\"]. A program matches when its record lists any one of them. Leave it out to search every program, including those not reviewed for capabilities.",
"minItems": 1,
"maxItems": 7,
"type": "array",
"items": {
"type": "string",
"enum": [
"search",
"scrape",
"crawl",
"browser",
"extract",
"llm",
"sandbox"
]
}
}
},
"$schema": "https://json-schema.org/draft/2020-12/schema",
"additionalProperties": false
}🟢get_program(id)
Returns one program’s reviewed record: what it offers, the agent-tool capabilities its product offers where reviewed, who decides, exclusions, official sources and the date checked.
Input Schema
{
"type": "object",
"properties": {
"id": {
"type": "string",
"minLength": 1,
"maxLength": 120,
"description": "A program id as it appears in program records (e.g. \"aws.activate-credits\"), or its page slug (e.g. \"aws-activate-credits\")."
}
},
"required": [
"id"
],
"$schema": "https://json-schema.org/draft/2020-12/schema",
"additionalProperties": false
}🟢compare_programs(goal, stage)
Returns families of programs that serve the same goal across providers, side by side, with no winner and no score.
Input Schema
{
"type": "object",
"properties": {
"goal": {
"description": "Limit to programs serving one goal, e.g. \"build\" or \"save\". Leave empty for every goal.",
"type": "string",
"enum": [
"build",
"save",
"get_help",
"migrate",
"sell",
"marketing",
"fundraising",
"accelerators",
"community"
]
},
"stage": {
"description": "Limit to programs for one stage, e.g. \"seed\". Leave empty for every stage.",
"type": "string",
"enum": [
"idea",
"bootstrapped",
"pre_seed",
"seed",
"series_a",
"series_b_plus",
"growth"
]
}
},
"$schema": "https://json-schema.org/draft/2020-12/schema",
"additionalProperties": false
}🟢whats_changed(limit)
Returns what Programscape’s latest checks against the providers’ own pages found, dated and sourced.
Input Schema
{
"type": "object",
"properties": {
"limit": {
"description": "How many of the latest re-checks to return (default 3).",
"type": "integer",
"minimum": 1,
"maximum": 10
}
},
"$schema": "https://json-schema.org/draft/2020-12/schema",
"additionalProperties": false
}Community
Evidence