Koskamo

Spark MCP

An open-source MCP server for the Spark workflow catalog that allows AI assistants to search, fetch, and install AI agents, skills, prompts, and other assets from the Spark marketplace into compatible tools like Claude Code and Cursor.

Endpoint and access

No sign-in to connect and list tools. Individual tools may still need a vendor account, credentials, or permissions; check the documented prerequisites.

Spark MCP logo, by Entire VCCommunity listingStreamable HTTPNo sign-inEndpoint checked 2026-11-07Published by Entire VC
You need:For optional authenticated access, set SPARK_API_KEY in the environment used to launch Cursor and restart it.
MCP endpoint (Streamable HTTP)
https://spark.entire.vc/mcp/
Vendor documentation

What its tools do

6 tools, grouped by the hints the server advertises. Hints are self-declared, not verified behavior.

6 of 6 have a description · 6 of 6 declare behavior hints · 5 of 5 with parameters document them all

Checks and signals

Each line is separate evidence, not a trust score.

  • Passed Endpoint answered the live check ·
  • Availability 1 of 1 checks passed in 30 days

What you can do with it

  • Search the Spark catalog for AI assets by query or type
  • Get full details of a specific asset by its slug
  • Fetch raw prompt or skill content for immediate use
  • List popular assets or available filtering categories

Source and maintenance

Community listingRegistry 4.0.4
Maintenance checked

Protocol and capabilities

Server
Spark — AI Assets Marketplace 4.1.2
MCP protocol negotiated in check
2025-11-25
Tools
6 advertised
Resources
0 advertised
Resource templates
2 advertised
Prompts
0 advertised
Server-advertised capabilities
{
  "tools": {
    "listChanged": true
  },
  "logging": {},
  "prompts": {
    "listChanged": true
  },
  "resources": {
    "subscribe": false,
    "listChanged": true
  }
}

Server-provided instructions

Untrusted server output shown for inspection. It is not Koskamo guidance and is excluded from knowledge search.

Search and discover AI assets (agents, skills, prompts, MCP connectors, bundles) from the Spark marketplace at spark.entire.vc. search_assets finds assets, get_asset returns their full details, and get_asset_content returns the prompt or skill text together with an application_id. report_outcome records the result of applying an asset; the report text is published on the asset's public page.

Tools

6 advertised

search_assets — Search assets
Advertised by the server during the last successful anonymous check.
Advertised read-only

Search the Spark AI assets marketplace for agents, skills, prompts, prompt chains, MCP connectors and bundles. For when a text query is available but the slug is not known; get_asset describes a known slug. Returns numbered summaries with type, downloads, outcomes, price, tags and URL, or a no-results message. No login required; no acquisition is made. Unmatched nonempty queries may be recorded as unmet catalog needs. A nonempty job ranks text matches by task fit, even with a non-combo sort. For example, search_assets(query='rate limiting', job='add a rate limiter', limit=5).

search_assets input schema
{
  "type": "object",
  "required": [
    "query"
  ],
  "properties": {
    "job": {
      "anyOf": [
        {
          "type": "string"
        },
        {
          "type": "null"
        }
      ],
      "default": null,
      "description": "Optional task, e.g. 'review Python code'; a nonempty value enables job-based ranking regardless of sort."
    },
    "sort": {
      "type": "string",
      "default": "combo",
      "description": "combo (default): quality, ratings and outcomes; popular: downloads; newest: creation date; rating: average rating. Invalid values fall back to combo; job enables ranking for any sort."
    },
    "type": {
      "anyOf": [
        {
          "type": "string"
        },
        {
          "type": "null"
        }
      ],
      "default": null,
      "description": "Optional asset type: agent, skill, prompt, prompt_chain, mcp_connector or bundle; omitted means all types."
    },
    "limit": {
      "type": "integer",
      "default": 10,
      "description": "Maximum results; clamped to 1-50, default 10."
    },
    "query": {
      "type": "string",
      "description": "Text matched against titles and descriptions, e.g. 'rate limiting'; empty text browses the catalog."
    },
    "domain": {
      "anyOf": [
        {
          "type": "string"
        },
        {
          "type": "null"
        }
      ],
      "default": null,
      "description": "Optional domain slug from list_categories, e.g. 'development'; omitted means all domains."
    }
  },
  "additionalProperties": false
}
search_assets output schema
{
  "type": "object",
  "required": [
    "result"
  ],
  "properties": {
    "result": {
      "type": "string"
    }
  },
  "x-fastmcp-wrap-result": true
}
search_assets annotations
{
  "readOnlyHint": true,
  "openWorldHint": false,
  "idempotentHint": true
}
get_asset — Get asset details
Advertised by the server during the last successful anonymous check.
Advertised read-only

Get full details of a Spark asset by its slug — description, metadata, outcome reports, bundled files and the URL on spark.entire.vc. For when a known slug needs inspection before acquisition. Returns Markdown details, which may include embedded content; get_asset_content obtains the raw content and a receipt. Public catalog lookup, no login or download recorded. Missing or unavailable slugs return a not-found message. For example, get_asset(slug='vb-seo-expert').

get_asset input schema
{
  "type": "object",
  "required": [
    "slug"
  ],
  "properties": {
    "slug": {
      "type": "string",
      "description": "Exact asset slug from a search result or Spark URL, e.g. 'vb-seo-expert'; not a URL or asset ID."
    }
  },
  "additionalProperties": false
}
get_asset output schema
{
  "type": "object",
  "required": [
    "result"
  ],
  "properties": {
    "result": {
      "type": "string"
    }
  },
  "x-fastmcp-wrap-result": true
}
get_asset annotations
{
  "readOnlyHint": true,
  "openWorldHint": false,
  "idempotentHint": true
}
get_asset_content — Get asset content
Advertised by the server during the last successful anonymous check.

Get the raw content of a Spark asset (prompt text, skill instructions, agent config) — the actual text to apply, not just a description of it. For when a known asset's content is needed for application; get_asset provides details without acquisition. Each successful fetch records a download/acquisition; repeated calls create new receipts and content may change after updates. Free content needs no login. Paid content requires a Spark API key (X-API-Key) or Bearer token and prior purchase or ownership; this tool makes no purchase. Returns content and an application_id for report_outcome, or a not-found/access message. Content may be a source link rather than embedded text. For example, get_asset_content(slug='vb-seo-expert').

get_asset_content input schema
{
  "type": "object",
  "required": [
    "slug"
  ],
  "properties": {
    "slug": {
      "type": "string",
      "description": "Exact asset slug from a search result or Spark URL, e.g. 'vb-seo-expert'; not a URL or asset ID."
    }
  },
  "additionalProperties": false
}
get_asset_content output schema
{
  "type": "object",
  "required": [
    "result"
  ],
  "properties": {
    "result": {
      "type": "string"
    }
  },
  "x-fastmcp-wrap-result": true
}
get_asset_content annotations
{
  "readOnlyHint": false,
  "idempotentHint": false,
  "destructiveHint": false
}
report_outcome — Report outcome
Advertised by the server during the last successful anonymous check.

Records the result of applying a fetched Spark asset: applied as is, changed, broke, or not applicable. For when the outcome is known and an application_id from get_asset_content is available, rather than a star rating. Mismatched user/session receipts are rejected; asset owners cannot report on their own assets. Submitting the same application_id updates the report. Authenticated reports count, but team reports do not affect rankings; anonymous reports are unverified. Returns a saved/updated confirmation, or a validation/receipt error. Fields `task`, `note`, `changed_what`, `failed_at`, `expected`, `got` are published on the asset's public page on spark.entire.vc, visible to any visitor. Do not include client data, private paths, keys, emails or URLs with tokens. Your identity is never shown on that page. Example: report_outcome(application_id='<receipt>', result='applied_as_is', task='add a rate limiter').

report_outcome input schema
{
  "type": "object",
  "required": [
    "application_id",
    "result",
    "task"
  ],
  "properties": {
    "got": {
      "anyOf": [
        {
          "type": "string"
        },
        {
          "type": "null"
        }
      ],
      "default": null,
      "description": "Required for not_applicable: what the asset actually does (≤ 200 characters); ignored for other results."
    },
    "note": {
      "anyOf": [
        {
          "type": "string"
        },
        {
          "type": "null"
        }
      ],
      "default": null,
      "description": "Optional extra context (≤ 300 characters); published on the asset page."
    },
    "task": {
      "type": "string",
      "description": "Required nonempty task attempted, one phrase (≤ 200 characters); published on the asset page."
    },
    "model": {
      "anyOf": [
        {
          "type": "string"
        },
        {
          "type": "null"
        }
      ],
      "default": null,
      "description": "Optional model name; trimmed to 100 characters. Shown, never ranked."
    },
    "result": {
      "enum": [
        "applied_as_is",
        "applied_with_changes",
        "broke",
        "not_applicable"
      ],
      "type": "string",
      "description": "applied_as_is: applied without edits, task solved. applied_with_changes: had to edit it, then solved (requires changed_what). broke: tried to apply and it failed (requires failed_at). not_applicable: read it and did not apply, it does something else (requires expected and got)."
    },
    "expected": {
      "anyOf": [
        {
          "type": "string"
        },
        {
          "type": "null"
        }
      ],
      "default": null,
      "description": "Required for not_applicable: what was sought (≤ 200 characters); ignored for other results."
    },
    "failed_at": {
      "anyOf": [
        {
          "type": "string"
        },
        {
          "type": "null"
        }
      ],
      "default": null,
      "description": "Required for broke: failed step, tool or command and error class (≤ 200 characters); ignored for other results."
    },
    "changed_what": {
      "anyOf": [
        {
          "type": "string"
        },
        {
          "type": "null"
        }
      ],
      "default": null,
      "description": "Required for applied_with_changes: what changed (≤ 200 characters); ignored for other results."
    },
    "application_id": {
      "type": "string",
      "description": "The application_id at the end of the get_asset_content response."
    }
  },
  "additionalProperties": false
}
report_outcome output schema
{
  "type": "object",
  "required": [
    "result"
  ],
  "properties": {
    "result": {
      "type": "string"
    }
  },
  "x-fastmcp-wrap-result": true
}
report_outcome annotations
{
  "readOnlyHint": false,
  "idempotentHint": true,
  "destructiveHint": false
}
list_popular — List popular assets
Advertised by the server during the last successful anonymous check.
Advertised read-only

List the most popular Spark assets by download count, optionally filtered by type. For when browsing without a text query; search_assets finds text matches. Returns numbered summaries with outcomes, price, tags and URLs, or 'No assets found.' Downloads measure acquisitions, not successful applications or ratings. Public catalog lookup, no login or download recorded. For example, list_popular(type='skill', limit=5).

list_popular input schema
{
  "type": "object",
  "properties": {
    "type": {
      "anyOf": [
        {
          "type": "string"
        },
        {
          "type": "null"
        }
      ],
      "default": null,
      "description": "Optional asset type: agent, skill, prompt, prompt_chain, mcp_connector or bundle; omitted means all types."
    },
    "limit": {
      "type": "integer",
      "default": 10,
      "description": "Maximum results; clamped to 1-20, default 10."
    }
  },
  "additionalProperties": false
}
list_popular output schema
{
  "type": "object",
  "required": [
    "result"
  ],
  "properties": {
    "result": {
      "type": "string"
    }
  },
  "x-fastmcp-wrap-result": true
}
list_popular annotations
{
  "readOnlyHint": true,
  "openWorldHint": false,
  "idempotentHint": true
}
list_categories — List categories
Advertised by the server during the last successful anonymous check.
Advertised read-only

List available categories (domains and AI tags) in the Spark marketplace. For when domain filter values or taxonomy are needed; search_assets returns assets rather than categories. Takes no parameters. Returns Markdown lists of AI tag names/slugs and domain names/slugs grouped by parent category; domain slugs are accepted by search_assets' domain filter. AI tags are not a search_assets filter. Public catalog lookup, no login or download recorded. For example, list_categories().

list_categories input schema
{
  "type": "object",
  "properties": {},
  "additionalProperties": false
}
list_categories output schema
{
  "type": "object",
  "required": [
    "result"
  ],
  "properties": {
    "result": {
      "type": "string"
    }
  },
  "x-fastmcp-wrap-result": true
}
list_categories annotations
{
  "readOnlyHint": true,
  "openWorldHint": false,
  "idempotentHint": true
}

Prompts

0 advertised

No prompt definitions available.

Resources

0 advertised

asset_resource

Advertised by the server during the last successful anonymous check.

Get asset details as markdown.

asset_resource URI template
spark://assets/{slug}

MIME type: text/plain

catalog_resource

Advertised by the server during the last successful anonymous check.

Browse assets by type.

catalog_resource URI template
spark://catalog/{type}

MIME type: text/plain

30-day availability

Aggregated from read-only remote checks; this is not a tool-execution or security guarantee.

Successful checks
1 of 1 (100%)
Average latency
2217 ms
95th percentile latency
2217 ms

Maintenance history

Public check and source-refresh events. Editorial and ownership records remain private.

  • · probe · passed · 2217 ms · metadata changed · 6 tool(s), 0 resource(s), 2 resource template(s), 0 prompt(s)

Connect from your client

Each snippet registers the same endpoint; pick the client you use.

This server is operated by the named third party. Listing and endpoint checks are not an endorsement or a security audit. Review the operator's permissions, terms, and data handling before connecting. How listings are checked and corrected.

Claude Code

Run this once in a terminal. It registers the remote server. Use --scope project to write .mcp.json for the repo.
Claude Code configuration
claude mcp add --transport http spark-mcp https://spark.entire.vc/mcp/

Codex

Run this once. Codex stores MCP servers in ~/.codex/config.toml (or .codex/config.toml in a trusted project).
Codex configuration
codex mcp add spark-mcp --url https://spark.entire.vc/mcp/

Cursor

Merge this server into .cursor/mcp.json in your project, then enable spark-mcp in your MCP settings.
Cursor configuration
{
  "mcpServers": {
    "spark-mcp": {
      "url": "https://spark.entire.vc/mcp/"
    }
  }
}

Cline

Merge this into cline_mcp_settings.json (Cline → MCP Servers → Configure).
Cline configuration
{
  "mcpServers": {
    "spark-mcp": {
      "type": "streamableHttp",
      "url": "https://spark.entire.vc/mcp/",
      "disabled": false
    }
  }
}

VS Code

Merge this server into .vscode/mcp.json. Use MCP: List Servers to start spark-mcp and inspect its tools.
VS Code configuration
{
  "servers": {
    "spark-mcp": {
      "type": "http",
      "url": "https://spark.entire.vc/mcp/"
    }
  }
}

Gemini CLI

Run this once. It writes .gemini/settings.json in the current project; pass --scope user for ~/.gemini/settings.json.
Gemini CLI configuration
gemini mcp add --transport http spark-mcp https://spark.entire.vc/mcp/

Claude Desktop

Open Claude Settings > Connectors > Add custom connector, enter this server URL and enable it for the conversation. This is a manual remote-connector handoff, not a desktop JSON configuration.
Claude Desktop configuration
https://spark.entire.vc/mcp/

Windsurf

Merge this into ~/.codeium/windsurf/mcp_config.json, then refresh MCP in Cascade. Windsurf remote servers use serverUrl, not url.
Windsurf configuration
{
  "mcpServers": {
    "spark-mcp": {
      "serverUrl": "https://spark.entire.vc/mcp/"
    }
  }
}

Let your agent find its tools

Find servers like Spark MCP from your agent. Add Koskamo once to search the index for endpoints, access requirements, and client setup. Public discovery needs no key.