Openaire
Server Details
OpenAIRE MCP — EU research outputs (publications, datasets, software, projects)
The last two health checks of this connector failed. If this server requires authentication, missing or expired test credentials may be the cause. A test profile lets Glama authenticate for health checks and discover tools; it is separate from your personal connections.
If you are the author, claim ownership, then add or update a test profile under Admin → Test Profile.
- Status
- Unhealthy
- Uptime
- 17.5% over 69 days
- Last Tested
- Transport
- Streamable HTTP
- URL
- Repository
- pipeworx-io/mcp-openaire
- GitHub Stars
- 0
- Server Listing
- mcp-openaire
TDQS
Scored across 47 tools
Descriptions do heavy lifting to delimit boundaries (ask_pipeworx vs grounded vs deep_research; entity_profile vs company_facts vs recent_changes vs compare_entities; polymarket_edges vs arbitrage vs fill_risk vs kalshi_spread), but the boundaries are genuinely subtle and require reading long text to choose correctly. Worse, ask_pipeworx, ask_pipeworx_beta and ask_pipeworx_grounded are near-identical routers whose only documented difference is an experimental routing candidate that is currently inactive, and ai_visibility_check vs scan_competitor_ai_presence plus several prediction-market tools overlap heavily. An agent without careful reading will misfire.
Everything is snake_case with no camelCase or case-mixing, so the surface reads predictably. Verb conventions are mostly verb_noun (search_publications, resolve_entity, validate_claim, generate_llms_txt), with a minority of noun-phrase names (entity_profile, company_facts, recent_changes, resolution_audit, ai_visibility_check) and bare verbs (remember, recall, forget, subscribe), which is a minor stylistic deviation rather than inconsistency.
47 tools is far above the 3-15 sweet spot and well into the "heavy" band, and the set spans many unrelated domains (SEC/XBRL fundamentals, prediction markets, NPM dependency scanning, LLM visibility probing, OpenAIRE academic search, memory KV, subscriptions). Several tools (ask_pipeworx_beta, get_project/get_research_product, release_calendar_markets) look like thin specializations that a well-scoped surface would fold into a parameter or drop.
Lifecycle coverage is strong for most subdomains: memory has remember/recall/forget, subscriptions have subscribe/unsubscribe/list_subscriptions/recent_alerts, research search has search_* plus get_project/get_research_product, and the prediction-market family chains edges→arbitrage→fill_risk→edge_tracker→resolution_diff/audit. Gaps are minor (no update/rename for stored memory or subscriptions, no delete for research entities, no unified fetch for arbitrary pipeworx:// records beyond search_within), workable around but not airtight.
Tool Schema Changelog
Recent tool additions, removals, and schema changes observed during successful MCP inspections.
6 tool updates
- Changed
ask_pipeworx1 field changed- added
Input schema / properties / packsAdded value: +{ + "description": "OPTIONAL. Restrict routing to these pack slugs (e.g. [\"sec-form-d\",\"sec-13f\"]) — the router then picks only from tools in those packs. Omit for the default full-catalog routing. Slugs come from list_packs / search_packs / https://pipeworx.io/directory; unlisted or unknown slugs are ignored and named in _meta.pack_scope.ignored, and if none of them resolves the question is routed across the whole catalog with _meta.pack_scope.full_catalog:true (never an empty answer).", + "items": { + "type": "string" + }, + "type": "array" +}
- Changed
ask_pipeworx_beta1 field changed- added
Input schema / properties / packsAdded value: +{ + "description": "OPTIONAL. Restrict routing to these pack slugs (e.g. [\"sec-form-d\",\"sec-13f\"]) — the router then picks only from tools in those packs. Omit for the default full-catalog routing. Slugs come from list_packs / search_packs / https://pipeworx.io/directory; unlisted or unknown slugs are ignored and named in _meta.pack_scope.ignored, and if none of them resolves the question is routed across the whole catalog with _meta.pack_scope.full_catalog:true (never an empty answer).", + "items": { + "type": "string" + }, + "type": "array" +}
- Changed
ask_pipeworx_grounded1 field changed- added
Input schema / properties / prefer_toolAdded value: +{ + "description": "Run this exact tool instead of letting the router choose — use a name from a previous answer's alternatives[]. Arguments are still filled from your question. Unknown names are refused, never guessed.", + "type": "string" +}
- Added
company_register_search - Changed
entity_profile2 fields changed- added
Input schema / properties / countryAdded value: +{ + "description": "OPTIONAL ISO 3166-1 alpha-2 of the business register you mean (\"NO\", \"FI\", \"GB\", \"JP\", \"FR\", \"EE\", \"BR\"). Only affects a NAME lookup, and is often what separates the company you mean from a US namesake. When a name resolves to a register entity with no CIK, the SEC/CIK-keyed sections are reported under `sources_skipped` with reason `not_queried` — they were never asked, which is not the same as having failed.", + "type": "string" +} - changed
Input schema / properties / value / descriptionPrevious value: -"Ticker (e.g., \"AAPL\"), zero-padded CIK (e.g., \"0000320193\"), or company name (e.g., \"Moderna\") — names resolve via SEC EDGAR company-name match."New value: +"Ticker (e.g., \"AAPL\"), zero-padded CIK (e.g., \"0000320193\"), or company name (e.g., \"Moderna\"). A NAME now resolves through the national business registers as well as SEC EDGAR, so a non-US company returns its register identity and record rather than `resolved: false`."
- Changed
resolve_entity2 fields changed- added
Input schema / properties / countryAdded value: +{ + "description": "OPTIONAL ISO 3166-1 alpha-2 of the country whose business register you mean (\"NO\", \"FI\", \"JP\", \"GB\", \"FR\", \"EE\", \"BR\"). Narrows the national-register fan-out and is often the difference between the right company and a US namesake — \"Apple\" with country \"NO\" is a Norwegian company, not Apple Inc. Omitting it searches every register we can name, which is the right default when you do not know. company only; ignored for drug.", + "type": "string" +} - changed
Output schema / (root)Previous value: -nullNew value: +{ + "properties": { + "brand": { + "type": "string" + }, + "candidates": { + "description": "Rivals, best first. Populated on \"ambiguous\" and on \"matched\" alike.", + "items": { + "properties": { + "country": { + "description": "ISO-2 of the REGISTER, not of the company's operations.", + "type": "string" + }, + "data_as_of": { + "description": "That register's own snapshot date, per row, so a stale country is visible.", + "type": [ + "string", + "null" + ] + }, + "detail_tool": { + "description": "The live pack tool that returns the full record, e.g. \"brreg-no:get_entity\".", + "type": [ + "string", + "null" + ] + }, + "legal_form": { + "type": [ + "string", + "null" + ] + }, + "legal_name": { + "type": "string" + }, + "lei": { + "description": "From the GLEIF crosswalk when present. Never guessed from a name.", + "type": [ + "string", + "null" + ] + }, + "match_type": { + "enum": [ + "id", + "exact", + "exact_form", + "prefix", + "tokens" + ], + "type": "string" + }, + "matched_kind": { + "enum": [ + "legal", + "trading", + "former", + "english", + "kana" + ], + "type": "string" + }, + "matched_name": { + "description": "The name row that matched, exactly as the publisher spells it.", + "type": "string" + }, + "register": { + "description": "Publisher + dataset, e.g. \"Brønnøysund Register Centre, Enhetsregisteret\". Never a URL or filename.", + "type": "string" + }, + "register_id": { + "description": "The native id in the register's own canonical formatting.", + "type": "string" + }, + "register_key": { + "description": "Stable machine slug for the register.", + "type": "string" + }, + "registration_status": { + "description": "GLEIF rows only: the LEI RECORD's lifecycle (ISSUED/LAPSED/RETIRED/...). A DIFFERENT fact from `status` — a lapsed LEI is unmaintained reference data about a company that may well still trade.", + "type": [ + "string", + "null" + ] + }, + "score": { + "description": "0-1, assigned centrally. An adapter never grades itself.", + "type": "number" + }, + "status": { + "description": "The COMPANY's status.", + "enum": [ + "active", + "inactive", + "dissolved", + "unknown" + ], + "type": "string" + }, + "status_raw": { + "description": "The register's own status word, verbatim and unglossed.", + "type": [ + "string", + "null" + ] + } + }, + "required": [ + "country", + "register", + "register_key", + "register_id", + "legal_name", + "score", + "status" + ], + "type": "object" + }, + "type": "array" + }, + "cik_withheld": { + "description": "A CIK that came back from a FUZZY SEC name match and is NOT asserted, because the spine matched a stronger non-US candidate. The number is here so a caller who wanted the US filer can still use it; what changed is that we no longer claim it IS the answer. See `unresolved.cik` for the reason.", + "type": "string" + }, + "fanout_incomplete": { + "description": "Present IFF at least one register in `searched[]` carried an `error` — set even when `match_status` stayed \"ambiguous\". `withheld_match` is the candidate this call declined to ASSERT because a register was missing, carried rather than discarded so a caller who accepts the caveat can still use it.", + "properties": { + "unavailable": { + "items": { + "properties": { + "country": { + "type": "string" + }, + "error": { + "type": "string" + }, + "register": { + "type": "string" + }, + "register_key": { + "type": "string" + } + }, + "type": "object" + }, + "type": "array" + }, + "withheld_match": { + "type": [ + "object", + "null" + ] + } + }, + "type": "object" + }, + "figi_withheld": { + "description": "A FIGI that matched this name in OpenFIGI (`figi_match: \"name_search\"`) and is NOT asserted, because `match_status` is \"incomplete\": a name search cannot tell a company apart from a security carrying its name, and the registers that would have settled it are the ones we could not ask. A `ticker_map` FIGI is never withheld this way — it is corroborated by the resolved ticker it came from. Carried so a caller who accepts the caveat can use it; see `unresolved.figi`, and retry, since a transiently rate-limited register completes on the next call.", + "type": "string" + }, + "ids": { + "description": "Every identifier established: cik, ticker, company_name, lei, figi, isin, cusip, register_id, register_country. A key absent here appears in `unresolved` with a reason — never silently dropped.", + "type": "object" + }, + "ingredient": { + "type": "string" + }, + "match_explanation": { + "description": "Plain words. Always present when the spine ran, and required on \"ambiguous\" and \"no_match\".", + "type": "string" + }, + "match_scoring": { + "description": "The margin rule's own inputs, so a caller can see WHY it fell where it did.", + "properties": { + "margin": { + "type": [ + "number", + "null" + ] + }, + "runner_up": { + "type": [ + "number", + "null" + ] + }, + "thresholds": { + "properties": { + "floor": { + "type": "number" + }, + "margin": { + "type": "number" + }, + "match": { + "type": "number" + } + }, + "type": "object" + }, + "top": { + "type": [ + "number", + "null" + ] + } + }, + "type": "object" + }, + "match_status": { + "description": "The headline to branch on. \"ambiguous\" is an ANSWER, not a failure: two companies matched the name equally well and both are in `candidates`. \"no_match\" means every register in `searched` was asked and none carried it. \"incomplete\" means one of them could NOT be asked (it carries an `error` in `searched[]`), so the candidate set is short by an unknown amount and no id is asserted — distinct from \"ambiguous\" because a RETRY is what resolves it, not a narrower query; `fanout_incomplete` names the unreachable registers and carries, under `withheld_match`, the candidate that would have been returned on a complete fan-out.", + "enum": [ + "matched", + "ambiguous", + "no_match", + "incomplete" + ], + "type": "string" + }, + "notes": { + "type": "string" + }, + "query": { + "type": "string" + }, + "registers": { + "description": "The matched entity as every register that carries it — the match (flagged `matched: true`) plus anything that collapsed into it. A Companies House number AND the LEI that crosswalks to it are the SAME answer, not rivals.", + "items": { + "properties": { + "country": { + "description": "ISO-2 of the REGISTER, not of the company's operations.", + "type": "string" + }, + "data_as_of": { + "description": "That register's own snapshot date, per row, so a stale country is visible.", + "type": [ + "string", + "null" + ] + }, + "detail_tool": { + "description": "The live pack tool that returns the full record, e.g. \"brreg-no:get_entity\".", + "type": [ + "string", + "null" + ] + }, + "legal_form": { + "type": [ + "string", + "null" + ] + }, + "legal_name": { + "type": "string" + }, + "lei": { + "description": "From the GLEIF crosswalk when present. Never guessed from a name.", + "type": [ + "string", + "null" + ] + }, + "match_type": { + "enum": [ + "id", + "exact", + "exact_form", + "prefix", + "tokens" + ], + "type": "string" + }, + "matched_kind": { + "enum": [ + "legal", + "trading", + "former", + "english", + "kana" + ], + "type": "string" + }, + "matched_name": { + "description": "The name row that matched, exactly as the publisher spells it.", + "type": "string" + }, + "register": { + "description": "Publisher + dataset, e.g. \"Brønnøysund Register Centre, Enhetsregisteret\". Never a URL or filename.", + "type": "string" + }, + "register_id": { + "description": "The native id in the register's own canonical formatting.", + "type": "string" + }, + "register_key": { + "description": "Stable machine slug for the register.", + "type": "string" + }, + "registration_status": { + "description": "GLEIF rows only: the LEI RECORD's lifecycle (ISSUED/LAPSED/RETIRED/...). A DIFFERENT fact from `status` — a lapsed LEI is unmaintained reference data about a company that may well still trade.", + "type": [ + "string", + "null" + ] + }, + "score": { + "description": "0-1, assigned centrally. An adapter never grades itself.", + "type": "number" + }, + "status": { + "description": "The COMPANY's status.", + "enum": [ + "active", + "inactive", + "dissolved", + "unknown" + ], + "type": "string" + }, + "status_raw": { + "description": "The register's own status word, verbatim and unglossed.", + "type": [ + "string", + "null" + ] + } + }, + "required": [ + "country", + "register", + "register_key", + "register_id", + "legal_name", + "score", + "status" + ], + "type": "object" + }, + "type": "array" + }, + "related": { + "description": "Entities that collapsed INTO the match, each carrying `collapsed_by`.", + "items": { + "properties": { + "country": { + "description": "ISO-2 of the REGISTER, not of the company's operations.", + "type": "string" + }, + "data_as_of": { + "description": "That register's own snapshot date, per row, so a stale country is visible.", + "type": [ + "string", + "null" + ] + }, + "detail_tool": { + "description": "The live pack tool that returns the full record, e.g. \"brreg-no:get_entity\".", + "type": [ + "string", + "null" + ] + }, + "legal_form": { + "type": [ + "string", + "null" + ] + }, + "legal_name": { + "type": "string" + }, + "lei": { + "description": "From the GLEIF crosswalk when present. Never guessed from a name.", + "type": [ + "string", + "null" + ] + }, + "match_type": { + "enum": [ + "id", + "exact", + "exact_form", + "prefix", + "tokens" + ], + "type": "string" + }, + "matched_kind": { + "enum": [ + "legal", + "trading", + "former", + "english", + "kana" + ], + "type": "string" + }, + "matched_name": { + "description": "The name row that matched, exactly as the publisher spells it.", + "type": "string" + }, + "register": { + "description": "Publisher + dataset, e.g. \"Brønnøysund Register Centre, Enhetsregisteret\". Never a URL or filename.", + "type": "string" + }, + "register_id": { + "description": "The native id in the register's own canonical formatting.", + "type": "string" + }, + "register_key": { + "description": "Stable machine slug for the register.", + "type": "string" + }, + "registration_status": { + "description": "GLEIF rows only: the LEI RECORD's lifecycle (ISSUED/LAPSED/RETIRED/...). A DIFFERENT fact from `status` — a lapsed LEI is unmaintained reference data about a company that may well still trade.", + "type": [ + "string", + "null" + ] + }, + "score": { + "description": "0-1, assigned centrally. An adapter never grades itself.", + "type": "number" + }, + "status": { + "description": "The COMPANY's status.", + "enum": [ + "active", + "inactive", + "dissolved", + "unknown" + ], + "type": "string" + }, + "status_raw": { + "description": "The register's own status word, verbatim and unglossed.", + "type": [ + "string", + "null" + ] + } + }, + "required": [ + "country", + "register", + "register_key", + "register_id", + "legal_name", + "score", + "status" + ], + "type": "object" + }, + "type": "array" + }, + "resolved": { + "description": "At least one identifier was established. Read `match_status` and `unresolved` for WHICH — a company can be resolved in a national register with no CIK at all.", + "type": "boolean" + }, + "resources": { + "type": "object" + }, + "searched": { + "description": "EVERY register asked, with its own as-of date and row count. A register that could not be reached carries `error` — 0 rows with an error is \"we could not ask\", 0 rows without one is \"nothing is there\", and they are different answers.", + "items": { + "properties": { + "country": { + "type": "string" + }, + "data_as_of": { + "type": [ + "string", + "null" + ] + }, + "error": { + "type": "string" + }, + "register": { + "type": "string" + }, + "register_key": { + "type": "string" + }, + "rows": { + "type": "number" + } + }, + "required": [ + "register", + "register_key", + "country", + "rows" + ], + "type": "object" + }, + "type": "array" + }, + "sec_alternatives": { + "description": "EDGAR's own discarded near-misses on a name match, surfaced instead of dropped.", + "items": { + "properties": { + "cik": { + "type": "string" + }, + "company_name": { + "type": "string" + }, + "ticker": { + "type": "string" + } + }, + "type": "object" + }, + "type": "array" + }, + "sources": { + "description": "Per-identifier provenance. Every key in `ids` has a matching key here.", + "type": "object" + }, + "type": { + "type": "string" + }, + "unresolved": { + "description": "Per-identifier reason an id could NOT be established — the honest twin of `ids`.", + "type": "object" + } + }, + "required": [ + "type", + "query", + "resolved", + "ids", + "sources", + "unresolved" + ], + "type": "object" +}
5 tool updates
- Added
archive_compare - Added
archive_evidence - Added
classify_row - Added
research_row - Changed
subscribe2 fields changed- changed
Input schema / properties / params / descriptionPrevious value: -"Type-specific filter. sec_8k: {ticker:\"AAPL\", items?:[\"5.02\",\"1.01\"]}. polymarket_edge: {topic:\"fed\", min_spread_bps?:500}. fred_series: {series_id:\"UNRATE\"}. patent_grant: {applicant:\"Apple Inc.\"}. clinical_trial: {sponsor?:\"Pfizer\", condition?:\"lung cancer\", phase?:\"PHASE3\"} (sponsor or condition required)."New value: +"Type-specific filter. sec_8k: {ticker:\"AAPL\", items?:[\"5.02\",\"1.01\"]}. polymarket_edge: {topic:\"fed\", min_spread_bps?:500}. fred_series: {series_id:\"UNRATE\"}. patent_grant: {applicant:\"Apple Inc.\"}. clinical_trial: {sponsor?:\"Pfizer\", condition?:\"lung cancer\", phase?:\"PHASE3\"} (sponsor or condition required). form_d: {state?:\"CA\", industry?:\"Biotechnology\", min_amount?:500000, exemption?:\"06B\"} (all optional — omit all to watch every new Form D nationwide). news_keyword: {query:\"\\\"semiconductor sanctions\\\"\", lang?:\"eng\", domains?:[\"reuters.com\"]} (query required). job_post: EITHER {ats:\"greenhouse\", board_token:\"acme\"} (exact board) OR {domain:\"acme.com\"} (auto-detected), plus optional title_query/location_query substrings. tool_diff: {tool:\"form5500\", args?:{...}, fields:[\"headcount\"], schedule:\"daily\"} — re-runs that tool on schedule and fires when the named fields change; tool must be read-only and not need a Pipeworx-held platform key; schedule \"hourly\" needs the paid tier. new_entity: {state:\"CO\", name_query?:\"dental\", entity_type?:\"limited liability\"} — state is required and must be one of FL, NY, CO, OR, CT, TX, PA. Unknown keys in form_d/news_keyword/job_post/tool_diff/new_entity params are rejected at subscribe time." - changed
Input schema / properties / type / enumPrevious value: -[ - "sec_8k", - "polymarket_edge", - "fred_series", - "patent_grant", - "clinical_trial" -]New value: +[ + "sec_8k", + "polymarket_edge", + "fred_series", + "patent_grant", + "clinical_trial", + "form_d", + "news_keyword", + "job_post", + "tool_diff", + "new_entity" +]
29 tool updates
- Changed
ai_visibility_check1 field changed- added
Input schema / examplesAdded value: +[ + { + "entity": "Tesla" + } +]
- Changed
ask_pipeworx3 fields changed- added
Input schema / properties / askAdded value: +{ + "description": "Alias for question.", + "type": "string" +} - added
Input schema / properties / messageAdded value: +{ + "description": "Alias for question.", + "type": "string" +} - changed
Input schema / properties / question / descriptionPrevious value: -"Your question or request in natural language. Accepts query, q, prompt, text, input as aliases."New value: +"Your question or request in natural language. Accepts query, q, prompt, text, input, ask, message as aliases."
- Changed
ask_pipeworx_beta4 fields changed- added
Input schema / examplesAdded value: +[ + { + "question": "What is the current US unemployment rate?" + } +] - added
Input schema / properties / askAdded value: +{ + "description": "Alias for question.", + "type": "string" +} - added
Input schema / properties / messageAdded value: +{ + "description": "Alias for question.", + "type": "string" +} - changed
Input schema / properties / question / descriptionPrevious value: -"Your question or request in natural language. Accepts query, q, prompt, text, input as aliases."New value: +"Your question or request in natural language. Accepts query, q, prompt, text, input, ask, message as aliases."
- Changed
ask_pipeworx_grounded4 fields changed- added
Input schema / examplesAdded value: +[ + { + "question": "What was Apple's fiscal 2023 revenue?" + } +] - added
Input schema / properties / askAdded value: +{ + "description": "Alias for question.", + "type": "string" +} - added
Input schema / properties / messageAdded value: +{ + "description": "Alias for question.", + "type": "string" +} - changed
Input schema / properties / question / descriptionPrevious value: -"Your question in natural language. Accepts query, q, prompt, text, input as aliases."New value: +"Your question in natural language. Accepts query, q, prompt, text, input, ask, message as aliases."
- Added
company_facts - Changed
compare_entities1 field changed- added
Input schema / examplesAdded value: +[ + { + "type": "company", + "values": [ + "AAPL", + "MSFT" + ] + } +]
- Changed
deep_research9 fields changed- added
Input schema / examplesAdded value: +[ + { + "depth": "quick", + "question": "What is the current US unemployment rate and how has it changed over the past year?" + } +] - added
Input schema / properties / askAdded value: +{ + "description": "Alias for question.", + "type": "string" +} - added
Input schema / properties / inputAdded value: +{ + "description": "Alias for question.", + "type": "string" +} - added
Input schema / properties / messageAdded value: +{ + "description": "Alias for question.", + "type": "string" +} - added
Input schema / properties / promptAdded value: +{ + "description": "Alias for question.", + "type": "string" +} - added
Input schema / properties / qAdded value: +{ + "description": "Alias for question.", + "type": "string" +} - added
Input schema / properties / queryAdded value: +{ + "description": "Alias for question.", + "type": "string" +} - changed
Input schema / properties / question / descriptionPrevious value: -"The research question, in natural language. Broad/multi-part is fine — decomposition is the point."New value: +"The research question, in natural language. Broad/multi-part is fine — decomposition is the point. Accepts query, q, prompt, text, input, ask, message as aliases." - added
Input schema / properties / textAdded value: +{ + "description": "Alias for question.", + "type": "string" +}
- Changed
entity_profile1 field changed- added
Input schema / examplesAdded value: +[ + { + "type": "company", + "value": "AAPL" + } +]
- Changed
forget4 fields changed- added
Input schema / properties / kAdded value: +{ + "description": "Alias for key.", + "type": "string" +} - changed
Input schema / properties / key / descriptionPrevious value: -"Memory key to delete"New value: +"Memory key to delete. Accepts name, k, label as aliases." - added
Input schema / properties / labelAdded value: +{ + "description": "Alias for key.", + "type": "string" +} - added
Input schema / properties / nameAdded value: +{ + "description": "Alias for key.", + "type": "string" +}
- Changed
generate_llms_txt1 field changed- added
Input schema / examplesAdded value: +[ + { + "url": "https://pipeworx.io" + } +]
- Added
kalshi_weather_edge - Changed
pipeworx_feedback1 field changed- added
Input schema / examplesAdded value: +[ + { + "message": "Fleet #2184 smoke test: verifying pipeworx_feedback example call returns non-empty.", + "type": "other" + } +]
- Changed
pipeworx_trending1 field changed- added
Input schema / examplesAdded value: +[ + { + "window": "7d" + } +]
- Changed
polymarket_arbitrage1 field changed- added
Input schema / examplesAdded value: +[ + { + "topic": "Fed rate decision" + } +]
- Changed
polymarket_edge_tracker1 field changed- added
Input schema / examplesAdded value: +[ + { + "days": 14, + "window": "1wk" + } +]
- Changed
polymarket_edges3 fields changed- added
Input schema / examplesAdded value: +[ + { + "limit": 5, + "window": "1wk" + } +] - changed
Input schema / properties / min_edge_pp / descriptionPrevious value: -"Minimum |edge| in percentage points to include (default 0.5). Edge is evaluated NET of slippage."New value: +"Minimum |edge| in percentage points to include (default 0.5). Edge is evaluated NET of slippage and Polymarket's own taker fee." - changed
Input schema / properties / slippage_pp / descriptionPrevious value: -"Assumed execution slippage in percentage points per leg (default 0.3). Subtracted from raw |edge| before ranking and Kelly sizing. Polymarket has zero trading fees as of 2024 but bid/ask + thin depth typically eats 20-50bp per trade. Bump for very thin partitions; drop to 0 if you have a smarter fill model."New value: +"Assumed execution slippage in percentage points per leg (default 0.3), for bid/ask + thin depth cost that a last-trade price does not show. Subtracted from raw |edge| before ranking and Kelly sizing, ON TOP OF Polymarket's own taker fee — which is NOT zero (rate 0.04-0.07 depending on category, read off each market's own published fee schedule; see fees_pp_applied on every row and fees.ts for the full schedule). Bump slippage for very thin partitions; drop to 0 if you have a smarter fill model — the fee still applies regardless."
- Changed
polymarket_fill_risk1 field changed- added
Input schema / examplesAdded value: +[ + { + "market": "will-the-fed-increase-interest-rates-by-25-bps-after-the-december-2026-meeting-20260729232808636", + "side": "buy_yes", + "size_usd": 1000 + } +]
- Changed
recall4 fields changed- added
Input schema / properties / kAdded value: +{ + "description": "Alias for key.", + "type": "string" +} - changed
Input schema / properties / key / descriptionPrevious value: -"Memory key to retrieve (omit to list all keys)"New value: +"Memory key to retrieve (omit to list all keys). Accepts name, k, label as aliases." - added
Input schema / properties / labelAdded value: +{ + "description": "Alias for key.", + "type": "string" +} - added
Input schema / properties / nameAdded value: +{ + "description": "Alias for key.", + "type": "string" +}
- Changed
recent_changes1 field changed- added
Input schema / examplesAdded value: +[ + { + "since": "30d", + "type": "company", + "value": "AAPL" + } +]
- Added
release_calendar_markets - Changed
remember10 fields changed- added
Input schema / examplesAdded value: +[ + { + "key": "target_ticker", + "value": "AAPL" + } +] - added
Input schema / properties / contentAdded value: +{ + "description": "Alias for value.", + "type": "string" +} - added
Input schema / properties / dataAdded value: +{ + "description": "Alias for value.", + "type": "string" +} - added
Input schema / properties / kAdded value: +{ + "description": "Alias for key.", + "type": "string" +} - changed
Input schema / properties / key / descriptionPrevious value: -"Memory key (e.g., \"subject_property\", \"target_ticker\", \"user_preference\")"New value: +"Memory key (e.g., \"subject_property\", \"target_ticker\", \"user_preference\"). Accepts name, k, label as aliases." - added
Input schema / properties / labelAdded value: +{ + "description": "Alias for key.", + "type": "string" +} - added
Input schema / properties / nameAdded value: +{ + "description": "Alias for key.", + "type": "string" +} - added
Input schema / properties / textAdded value: +{ + "description": "Alias for value.", + "type": "string" +} - added
Input schema / properties / vAdded value: +{ + "description": "Alias for value.", + "type": "string" +} - changed
Input schema / properties / value / descriptionPrevious value: -"Value to store (any text — findings, addresses, preferences, notes)"New value: +"Value to store (any text — findings, addresses, preferences, notes). Accepts content, text, data, v as aliases; a non-string value is stored as JSON."
- Added
resolution_audit - Added
resolution_diff - Changed
resolve_entity1 field changed- added
Input schema / examplesAdded value: +[ + { + "type": "company", + "value": "AAPL" + } +]
- Changed
scan_competitor_ai_presence1 field changed- added
Input schema / examplesAdded value: +[ + { + "entities": [ + "Pipeworx", + "Zapier" + ] + } +]
- Changed
scan_dependency1 field changed- added
Input schema / examplesAdded value: +[ + { + "package": "left-pad" + } +]
- Changed
search_within1 field changed- added
Input schema / examplesAdded value: +[ + { + "query": "supply-chain risk", + "text": "Apple Inc. reported fiscal 2023 revenue of $383.285 billion, driven by strong iPhone and Services growth. Net income was $96.995 billion. The company faced supply-chain risk in China during the quarter." + } +]
- Changed
suggest_questions1 field changed- added
Input schema / examplesAdded value: +[ + { + "topic": "finance" + } +]
- Changed
validate_claim1 field changed- added
Input schema / examplesAdded value: +[ + { + "claim": "Apple's fiscal 2023 revenue was $383 billion" + } +]
1 tool update
- Changed
bet_research2 fields changed- changed
Input schema / examplesPrevious value: -[ - { - "market": "when-will-bitcoin-hit-150k" - }, - { - "market": "https://polymarket.com/event/when-will-bitcoin-hit-150k" - } -]New value: +[ + { + "market": "will-kristi-noem-win-the-2028-republican-presidential-nomination" + }, + { + "market": "https://polymarket.com/event/will-kristi-noem-win-the-2028-republican-presidential-nomination" + } +] - changed
Input schema / properties / market / descriptionPrevious value: -"Polymarket slug (\"when-will-bitcoin-hit-150k\"), full URL (\"https://polymarket.com/event/...\"), or question text (\"Will Bitcoin hit $150k?\"). Dated slugs stop resolving once they settle — Polymarket de-indexes resolved markets — so prefer an undated one."New value: +"Polymarket slug (\"will-kristi-noem-win-the-2028-republican-presidential-nomination\"), full URL (\"https://polymarket.com/event/...\"), or question text (\"Will Bitcoin hit $150k?\"). Dated slugs stop resolving once they settle — Polymarket de-indexes resolved markets — so prefer an undated one."
2 tool updates
- Changed
bet_research2 fields changed- changed
Input schema / examplesPrevious value: -[ - { - "market": "will-bitcoin-reach-100k-in-july-2026" - }, - { - "market": "https://polymarket.com/event/will-bitcoin-hit-150k-by-june-30-2026" - } -]New value: +[ + { + "market": "when-will-bitcoin-hit-150k" + }, + { + "market": "https://polymarket.com/event/when-will-bitcoin-hit-150k" + } +] - changed
Input schema / properties / market / descriptionPrevious value: -"Polymarket slug (\"will-bitcoin-hit-150k-by-june-30-2026\"), full URL (\"https://polymarket.com/event/...\"), or question text (\"Will Bitcoin hit $150k by June 30?\")"New value: +"Polymarket slug (\"when-will-bitcoin-hit-150k\"), full URL (\"https://polymarket.com/event/...\"), or question text (\"Will Bitcoin hit $150k?\"). Dated slugs stop resolving once they settle — Polymarket de-indexes resolved markets — so prefer an undated one."
- Changed
polymarket_kalshi_spread2 fields changed- changed
Input schema / examplesPrevious value: -[ - { - "topic": "fed" - }, - { - "topic": "btc" - } -]New value: +[ + { + "topic": "fed" + }, + { + "topic": "btc" + }, + { + "topic": "bitcoin" + }, + { + "topic": "fed rate decision" + } +] - changed
Input schema / properties / topic / descriptionPrevious value: -"Pre-mapped: fed | btc | cpi | gdp | sp500 | recession | next_pope | next_uk_pm | next_israel_pm | 2028_president"New value: +"Subject to compare. Canonical keys: fed | btc | eth | cpi | gdp | sp500 | recession | next_pope | next_uk_pm | next_israel_pm | 2028_president — but aliases and keywords resolve too (\"bitcoin\", \"fed rate decision\", \"ethereum\", \"inflation\", \"s&p 500\", \"us recession\", \"next pope\", \"2028 election\"). Check resolution.topic_matched_by in the response: \"exact\"/\"alias\" is a curated pairing, \"phrase\"/\"token\" is a keyword guess."
1 tool update
- Changed
entity_profile3 fields changed- changed
Input schema / properties / type / descriptionPrevious value: -"Entity type. Only \"company\" supported today; person/place coming soon."New value: +"\"company\" or \"ticker\" — both are accepted and behave identically; `value` can be a ticker, CIK, or company name either way. person/place coming soon." - changed
Input schema / properties / type / enumPrevious value: -[ - "company" -]New value: +[ + "company", + "ticker" +] - changed
Input schema / properties / value / descriptionPrevious value: -"Ticker (e.g., \"AAPL\") or zero-padded CIK (e.g., \"0000320193\"). Names not supported — use resolve_entity first if you only have a name."New value: +"Ticker (e.g., \"AAPL\"), zero-padded CIK (e.g., \"0000320193\"), or company name (e.g., \"Moderna\") — names resolve via SEC EDGAR company-name match."
Related MCP Connectors
DataCite MCP — DOIs for research datasets (free, no auth)
EU Funding & Tenders Portal (SEDIA search API) MCP.
OpenCitations MCP — citation index (COCI + general Index API).
Related MCP Servers
- AlicenseBqualityDmaintenanceMCP server for searching research grants across NSF (US), ERC (EU), and KRF/NRF (Korea) via a unified interface. NIH excluded—covered by existing connectors.35 npmMIT
- AlicenseAqualityDmaintenanceAn MCP server for discovering, retrieving, citing, and evaluating scientific records from the Zenodo repository.18MIT
- AlicenseAqualityCmaintenanceUnified MCP server for scientific literature search and extraction, integrating databases like Scopus, OpenAlex, Semantic Scholar, and Unpaywall to enable AI agents to discover papers, track citations, and analyze content.27MIT
- AlicenseAqualityAmaintenanceMCP server for scientific grounding: search and discover open-access research papers across arXiv, OpenAlex, Crossref, PubMed, and Semantic Scholar, and retrieve references/citations from paywalled journals via public DOI/abstract metadata.3126 PyPI6MIT
Glama MCP Gateway
Add one secure layer between your agents and this server.