Signal Lab MCP
An MCP server that indexes 95 free and free-to-start data sources across financial markets, global macro, weather, news, and OSINT. It allows AI agents to search, compare, and export catalog entries and source URLs without requiring authentication.
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.
https://signal-lab-jet.vercel.app/api/mcpWhat you can do with it
- Search for free financial and weather datasets
- Export catalog entries and source URLs
- Compare data sources and filters
- Ingest data using provided skills
Source and maintenance
Protocol and capabilities
- Server
- signal-lab-catalog 1.3.0
- MCP protocol
- 2025-06-18
- Tools
- 8 advertised
- Resources
- Not advertised
- Resource templates
- Not advertised
- Prompts
- Not advertised
{
"tools": {
"listChanged": true
}
}Server-provided instructions
Untrusted server output shown for inspection. It is not Koskamo guidance and is excluded from knowledge search.
Tools
8 advertised
search_catalog — Search the catalog
Find free and free-to-start data sources (financial markets, global macro, weather, news & RSS, OSINT), tools and models in the Signal Lab catalog by text and by filters (domain, category, type, access badge, sign-up needed, license, task, verified, verified_since; see list_filters for the values). Returns up to 25 summary rows in name order, each with lastVerified and sitePageUrl. Use get_entry for every field of one entry, export_catalog for the whole list, get_source_urls for provider and terms links.
{
"type": "object",
"$schema": "https://json-schema.org/draft/2020-12/schema",
"properties": {
"auth": {
"type": "string",
"maxLength": 100,
"minLength": 1,
"description": "What sign-up is needed, as the catalog records it, for example none or free API key"
},
"task": {
"type": "string",
"maxLength": 100,
"minLength": 1,
"description": "One task tag, for example macro or market-data"
},
"type": {
"enum": [
"Dataset",
"Model",
"Recipe",
"Starter Kit",
"Tool"
],
"type": "string",
"description": "Kind of entry, for example Dataset or Tool"
},
"badge": {
"enum": [
"Free",
"Freemium",
"Open Source",
"Unofficial"
],
"type": "string",
"description": "Access type: Free, Open Source, Freemium or Unofficial"
},
"limit": {
"type": "integer",
"maximum": 25,
"minimum": 1,
"description": "Default 10, at most 25"
},
"query": {
"type": "string",
"maxLength": 100,
"minLength": 1,
"description": "Words that must all appear in the name, slug, category, domain, coverage, license, license note or tasks"
},
"domain": {
"enum": [
"Financial",
"Global Macro",
"Weather",
"News & RSS",
"OSINT"
],
"type": "string",
"description": "Data domain: Financial, Global Macro, Weather, News & RSS or OSINT"
},
"license": {
"type": "string",
"maxLength": 100,
"minLength": 1,
"description": "The catalog's license value, for example Provider terms or MIT"
},
"category": {
"type": "string",
"maxLength": 100,
"minLength": 1,
"description": "The catalog's category, for example Market Data or Macro"
},
"verified": {
"type": "boolean",
"description": "true: only entries counted as Verified resources in llms.txt; false: only the others (Signal Lab originals, license unknown)"
},
"verified_since": {
"type": "string",
"pattern": "^\\d{4}-\\d{2}-\\d{2}$",
"description": "Only entries whose lastVerified date is on or after this date (YYYY-MM-DD)"
}
}
}{
"readOnlyHint": true,
"openWorldHint": false,
"idempotentHint": true,
"destructiveHint": false
}get_entry — Get one entry
Return one catalog entry by slug, with every field the catalog has for it (limits, coverage, auth, license, licenseNote, source URLs, lastVerified). Get slugs from search_catalog.
{
"type": "object",
"$schema": "https://json-schema.org/draft/2020-12/schema",
"required": [
"slug"
],
"properties": {
"slug": {
"type": "string",
"maxLength": 80,
"minLength": 1
}
}
}{
"readOnlyHint": true,
"openWorldHint": false,
"idempotentHint": true,
"destructiveHint": false
}compare_entries — Compare entries
Place the catalog's fields for up to 5 entries side by side. Values are the catalog's own; a field the catalog does not have shows Not in catalog.
{
"type": "object",
"$schema": "https://json-schema.org/draft/2020-12/schema",
"required": [
"slugs"
],
"properties": {
"slugs": {
"type": "array",
"items": {
"type": "string",
"maxLength": 80,
"minLength": 1
},
"maxItems": 5,
"minItems": 1
}
}
}{
"readOnlyHint": true,
"openWorldHint": false,
"idempotentHint": true,
"destructiveHint": false
}list_filters — List filter values
List the values the catalog uses for type, badge, auth, category, domain, license, task, verified and lastVerified, with how many entries have each. Call this first to pick exact filter values.
{
"type": "object",
"$schema": "https://json-schema.org/draft/2020-12/schema",
"properties": {}
}{
"readOnlyHint": true,
"openWorldHint": false,
"idempotentHint": true,
"destructiveHint": false
}catalog_info — Catalog information
Return the catalog's notice, schemaVersion, generated time, entry count and the download URLs of the full catalog as JSON and CSV.
{
"type": "object",
"$schema": "https://json-schema.org/draft/2020-12/schema",
"properties": {}
}{
"readOnlyHint": true,
"openWorldHint": false,
"idempotentHint": true,
"destructiveHint": false
}export_catalog — Export the data list
Export the Signal Lab catalog as JSON or CSV: every entry, or only those matching the same filters as search_catalog (no result cap). Optional fields picks columns by catalog field name. CSV has a header row, joins lists with "; " and repeats the catalog notice in the last column. Also returns the static download URLs.
{
"type": "object",
"$schema": "https://json-schema.org/draft/2020-12/schema",
"properties": {
"auth": {
"type": "string",
"maxLength": 100,
"minLength": 1,
"description": "What sign-up is needed, as the catalog records it, for example none or free API key"
},
"task": {
"type": "string",
"maxLength": 100,
"minLength": 1,
"description": "One task tag, for example macro or market-data"
},
"type": {
"enum": [
"Dataset",
"Model",
"Recipe",
"Starter Kit",
"Tool"
],
"type": "string",
"description": "Kind of entry, for example Dataset or Tool"
},
"badge": {
"enum": [
"Free",
"Freemium",
"Open Source",
"Unofficial"
],
"type": "string",
"description": "Access type: Free, Open Source, Freemium or Unofficial"
},
"query": {
"type": "string",
"maxLength": 100,
"minLength": 1,
"description": "Words that must all appear in the name, slug, category, domain, coverage, license, license note or tasks"
},
"domain": {
"enum": [
"Financial",
"Global Macro",
"Weather",
"News & RSS",
"OSINT"
],
"type": "string",
"description": "Data domain: Financial, Global Macro, Weather, News & RSS or OSINT"
},
"fields": {
"type": "array",
"items": {
"enum": [
"name",
"slug",
"category",
"domain",
"type",
"sitePageUrl",
"providerUrl",
"badge",
"auth",
"freeTierLimits",
"rateLimits",
"docsUrl",
"coverage",
"lastVerified",
"evidenceUrl",
"evidenceUrls",
"attribution",
"tasks",
"license",
"licenseUrl",
"licenseNote"
],
"type": "string"
},
"maxItems": 21,
"minItems": 1,
"description": "Catalog field names to include; default all"
},
"format": {
"enum": [
"json",
"csv"
],
"type": "string",
"description": "Default json"
},
"license": {
"type": "string",
"maxLength": 100,
"minLength": 1,
"description": "The catalog's license value, for example Provider terms or MIT"
},
"category": {
"type": "string",
"maxLength": 100,
"minLength": 1,
"description": "The catalog's category, for example Market Data or Macro"
},
"verified": {
"type": "boolean",
"description": "true: only entries counted as Verified resources in llms.txt; false: only the others (Signal Lab originals, license unknown)"
},
"verified_since": {
"type": "string",
"pattern": "^\\d{4}-\\d{2}-\\d{2}$",
"description": "Only entries whose lastVerified date is on or after this date (YYYY-MM-DD)"
}
}
}{
"readOnlyHint": true,
"openWorldHint": false,
"idempotentHint": true,
"destructiveHint": false
}get_source_urls — Get original source and terms URLs
Return where each entry's data comes from: the provider's site, docs and evidence pages, the license or terms URL with the license note, and the lastVerified date, plus the Signal Lab page. Pass up to 25 slugs, or the same filters as search_catalog (all entries if none). A URL the catalog does not record is left out.
{
"type": "object",
"$schema": "https://json-schema.org/draft/2020-12/schema",
"properties": {
"auth": {
"type": "string",
"maxLength": 100,
"minLength": 1,
"description": "What sign-up is needed, as the catalog records it, for example none or free API key"
},
"task": {
"type": "string",
"maxLength": 100,
"minLength": 1,
"description": "One task tag, for example macro or market-data"
},
"type": {
"enum": [
"Dataset",
"Model",
"Recipe",
"Starter Kit",
"Tool"
],
"type": "string",
"description": "Kind of entry, for example Dataset or Tool"
},
"badge": {
"enum": [
"Free",
"Freemium",
"Open Source",
"Unofficial"
],
"type": "string",
"description": "Access type: Free, Open Source, Freemium or Unofficial"
},
"query": {
"type": "string",
"maxLength": 100,
"minLength": 1,
"description": "Words that must all appear in the name, slug, category, domain, coverage, license, license note or tasks"
},
"slugs": {
"type": "array",
"items": {
"type": "string",
"maxLength": 80,
"minLength": 1
},
"maxItems": 25,
"minItems": 1,
"description": "Entry slugs; when given, filters are ignored"
},
"domain": {
"enum": [
"Financial",
"Global Macro",
"Weather",
"News & RSS",
"OSINT"
],
"type": "string",
"description": "Data domain: Financial, Global Macro, Weather, News & RSS or OSINT"
},
"license": {
"type": "string",
"maxLength": 100,
"minLength": 1,
"description": "The catalog's license value, for example Provider terms or MIT"
},
"category": {
"type": "string",
"maxLength": 100,
"minLength": 1,
"description": "The catalog's category, for example Market Data or Macro"
},
"verified": {
"type": "boolean",
"description": "true: only entries counted as Verified resources in llms.txt; false: only the others (Signal Lab originals, license unknown)"
},
"verified_since": {
"type": "string",
"pattern": "^\\d{4}-\\d{2}-\\d{2}$",
"description": "Only entries whose lastVerified date is on or after this date (YYYY-MM-DD)"
}
}
}{
"readOnlyHint": true,
"openWorldHint": false,
"idempotentHint": true,
"destructiveHint": false
}get_ingestion_skill — Get an ingestion skill
Return the agent-ready ingestion skill for one data source as markdown: how to get access, the exact request or download, the response format, a Python snippet that loads it into pandas and writes Parquet (or keeps it in memory where the provider's terms limit storage or leave it unclear), limits, known quirks, terms and attribution, and the provider pages it was written from, with quotes. Call it without a slug to list the sources that have a skill so far.
{
"type": "object",
"$schema": "https://json-schema.org/draft/2020-12/schema",
"properties": {
"slug": {
"type": "string",
"maxLength": 80,
"minLength": 1,
"description": "Entry slug, for example fred or gdelt; leave out to list available skills"
}
}
}{
"readOnlyHint": true,
"openWorldHint": false,
"idempotentHint": true,
"destructiveHint": false
}Prompts
Not advertised
Resources
Not advertised
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
- 1220 ms
- 95th percentile latency
- 1220 ms
Maintenance history
Public check and source-refresh events. Editorial and ownership records remain private.
- · probe · passed · 1220 ms · metadata changed · 8 tool(s)
Connect from your client
Each snippet registers the same endpoint; pick the client you use.
Claude Code
claude mcp add --transport http signal-lab-mcp https://signal-lab-jet.vercel.app/api/mcpCodex
codex mcp add signal-lab-mcp --url https://signal-lab-jet.vercel.app/api/mcpCursor
{
"mcpServers": {
"signal-lab-mcp": {
"url": "https://signal-lab-jet.vercel.app/api/mcp"
}
}
}Cline
{
"mcpServers": {
"signal-lab-mcp": {
"type": "streamableHttp",
"url": "https://signal-lab-jet.vercel.app/api/mcp",
"disabled": false
}
}
}VS Code
{
"servers": {
"signal-lab-mcp": {
"type": "http",
"url": "https://signal-lab-jet.vercel.app/api/mcp"
}
}
}Gemini CLI
gemini mcp add --transport http signal-lab-mcp https://signal-lab-jet.vercel.app/api/mcpClaude Desktop
{
"mcpServers": {
"signal-lab-mcp": {
"url": "https://signal-lab-jet.vercel.app/api/mcp"
}
}
}Windsurf
{
"mcpServers": {
"signal-lab-mcp": {
"serverUrl": "https://signal-lab-jet.vercel.app/api/mcp"
}
}
}Let your agent find its tools
Find servers like Signal Lab MCP from your agent. Add Koskamo once to search the index for endpoints, access requirements, and client setup. Public discovery needs no key.