Search / io.github.pipeworx-io/ecb
Ecb
R0· no sign-inECB Data Portal MCP — European Central Bank statistical data
v0.1.3 · active · repository · website · descriptor JSON · versions
Search / io.github.pipeworx-io/ecb
R0· no sign-inECB Data Portal MCP — European Central Bank statistical data
v0.1.3 · active · repository · website · descriptor JSON · versions
{
"mcpServers": {
"ecb": {
"type": "http",
"url": "https://gateway.pipeworx.io/ecb/mcp"
}
}
}claude mcp add --transport http ecb https://gateway.pipeworx.io/ecb/mcp[mcp_servers.ecb]
url = "https://gateway.pipeworx.io/ecb/mcp"
{
"$schema": "https://opencode.ai/config.json",
"mcp": {
"ecb": {
"type": "remote",
"url": "https://gateway.pipeworx.io/ecb/mcp",
"enabled": true
}
}
}{
"mcpServers": {
"ecb": {
"type": "http",
"url": "https://gateway.pipeworx.io/ecb/mcp"
}
},
"deeplink": "cursor://anysphere.cursor-deeplink/mcp/install?name=ecb&config=eyJ0eXBlIjoiaHR0cCIsInVybCI6Imh0dHBzOi8vZ2F0ZXdheS5waXBld29yeC5pby9lY2IvbWNwIn0%3D"
}{
"servers": {
"ecb": {
"type": "http",
"url": "https://gateway.pipeworx.io/ecb/mcp"
}
}
}{
"mcpServers": {
"ecb": {
"httpUrl": "https://gateway.pipeworx.io/ecb/mcp"
}
}
}extensions:
"ecb":
enabled: true
name: "ecb"
type: streamable_http
uri: "https://gateway.pipeworx.io/ecb/mcp"
timeout: 300
Not scored: fewer than three checks apply, usually because no remote answered a credential-free probe or the server is a local package.
protocol.modernnewest supported version is 2025-03-26; 2026-07-28 not supported, older versions are deprecated until 2027-07-28protocol.statelessonly applies to 2026-07-28 serversprotocol.transportstreamable HTTPprotocol.list_ttlonly applies to 2026-07-28 serversauth.prm, auth.as_metadata, auth.cimdno remote uses OAuthauth.secret_in_urlno templated URLtools.descriptions, tools.description_length, tools.schemas, tools.annotations, tools.directory_hints, tools.token_cost, tools.api_dumptool list unknown (behind auth, not probed, or empty)stability.changes, stability.rug_pulltool list unknowndeps.known_vulns, deps.mcp_sdk_version, deps.resolvableno npm or PyPI packageai_visibility_checkremovedProbe one or more LLMs for what they know about a business / brand / product / topic and score visibility (0-100) per model. Default model is Workers AI Llama-3.3-70b (free); pass `_apiKey` to also probe Anthropic (BYO key — you pay Anthropic directly for those calls). Returns per-model {score, confidence, signals, raw_response} + a combined view. Useful for AI-marketing audits, pre-launch brand checks, competitive monitoring.
polymarket_arbitrageremovedFind arbitrage opportunities on Polymarket via monotonicity violations + partition-sum checks. Call with NO args for a `trending_scan` of the top ~200 markets by weekly volume; pass `event` for the strongest per-event partition_check, or `topic` for a themed cross-event scan. `event` (recommended for a specific market): pass a Polymarket event slug like "fed-decision-may-2026" or "when-will-bitcoin-hit-150k"; walks child markets, checks date-axis / threshold-axis ordering AND computes the partition_check (sum of YES prices across mutually-exclusive legs — should ≈1; deviations >3pp emit a BUY/SELL EVERY LEG signal). `topic` (for cross-event scanning): pass a seed question like "Strait of Hormuz traffic returns to normal" or "Fed rate decision"; searches related events across the platform, flattens markets, runs the comparator on the union. Cross-event mode catches "...by May 31" vs "...by Jun 30" patterns that single-event misses. SEMANTIC ANCHOR: cross-event pairs require ≥0.30 Jaccard similarity on question tokens (prevents Powell-Fed-Pause being paired with Powell-DOJ-probe); skipped_low_similarity surfaces the rejected pair count. PARTITION FILTER: drops will-person-X / will-manager-Y / will-someone-else- placeholder slugs; partitions with >20% placeholder fraction return null arb signal. Response: opportunities[] (gap_pp, suggested_trade, reasoning, monotonicity violation context), and in event mode partition_check{sum_yes_prices, gap_from_1, placeholders_filtered, suggested_trade}. FEES: every opportunities[] row and partition_check.arbitrage carry edge_pp_gross (== gap_pp / overround_pp), fees_pp, edge_pp_net, net_positive, plus polymarket_fee_pp, fee_basis and fee_categories[]. BOTH cost components are modeled: Polymarket's own per-category TAKER FEE (fee = shares × rate × p × (1-p), rates crypto 0.07 / sports-economics-culture-weather-other 0.05 / finance-politics-mentions-tech 0.04, geopolitics and world events fee-free; verified against Polymarket's own docs as of 2026-09-13) and Polygon gas (~$0.02/leg). The taker fee dominates: ~$1.75 per 100 shares on a crypto market at 50c versus $0.02 of gas, so rows that looked profitable before fleet #1927 may now show net_positive:false — that is the correction, not a regression. Each leg is priced at ITS OWN market's rate and price (the fee curve peaks at 50c and falls toward both extremes). fee_basis says where the rate came from: 'payload' (read off the market, the normal case), 'category' (mapped from its fee category), 'fee_free', or 'fallback' (rate unknown — charged at the modal 0.05 rather than assumed free, so an unreadable market is never reported as costless). Where fill_check reprices against live depth, this does NOT double-count that spread cost. FILL CHECK: when the partition signal fires, arbitrage.fill_check prices it against live CLOB depth (theoretical_edge_pp_at_book vs realizable_edge_pp at 1000 shares/leg, thin_legs[]) — realizable_edge_pp ≤ 0 means the overround exists only at last-trade, not in the book; do not trade it. For custom sizing use polymarket_fill_risk.
ask_pipeworx_betaremovedBeta version of ask_pipeworx: identical universal router (same 6,981 tools, same arguments, same response shape) with candidate routing improvements enabled live whenever one is under test. No candidate is active right now (the last was retired on outcome evidence 2026-07-26), so this currently matches ask_pipeworx exactly. Use it exactly like ask_pipeworx when you want the newest routing; results are compared against the stable router to decide what merges. Falls back to nothing — this IS a full working router, just the experimental edge.
classify_rowremovedCheap categorization: given a company and a list of candidate labels, decide which labels apply — the most common GTM/AI usage shape (tagging a list by industry, ICP fit, etc.), one small model call. Same evidence contract as research_row: each label comes back {label, applies, evidence_url, quote, status: found|inferred|not_established} — "found" only when the model's quote is independently verified as a verbatim substring of the text used. Pass text directly (cheapest — no fetch) or entity.domain to fetch the homepage once as a fallback. No text and no domain means every label is not_established with no model call made.
release_calendar_marketsremovedJOIN of the official release calendar (econ data, the FOMC, FDA decisions, SEC rules) against LIVE Polymarket/Kalshi markets — which scheduled releases land in the next N hours, and which live markets resolve on them. This is a POSITIONING tool, not a speed product: results are cached like every other pack (≤ 60s TTL) and there is no push/webhook — do not use this to try to beat a release, use it to see what is coming and what is already priced. CATEGORIES: econ (CPI, Employment Situation/jobs report, GDP, PCE, PPI, retail sales, housing starts, jobless claims — via fred_release_dates per known release_id, since FRED's own cross-release calendar mostly returns recent actuals, not future dates), fed (the next FOMC meeting's rate decision, via fomc_calendar), fda (PDUFA action dates + FDA advisory-committee meetings, via pdufa_catalysts / fda_adcom_calendar), sec (SEC final rules whose own DATES clause names an effective date in the window, via federal-register recent_rules — usually finds nothing in a short window since SEC rules typically take effect 30–60 days out, which is an accurate answer, not a bug), court (ALWAYS EMPTY today — court-listener has no forward-looking scheduled-hearing calendar, only filing/termination dates, so this category returns zero releases with unsupported:true rather than fabricate one). Omit `categories` or pass "all" for every category. MATCHING AND ITS HONESTY CONTRACT: every release is returned even when it has ZERO matched markets — a release is never dropped just because nothing on Polymarket or Kalshi resolves on it (most FDA/SEC releases will show markets:[]; that is signal, not a gap). Every matched market carries resolves_on_this_release: "true" (the venue's own close/end date sits within ~36h of the release AND the question passed a subject filter — econ and fed only), "likely" (same subject filter, but the venue closes days away from the release date), or "unclear" (a keyword hit with no date to anchor against — always true for the fda category, which has no ladder structure to check a date against). matched_by names the mechanism (a Kalshi series ticker, a Polymarket search query, or an FDA keyword probe) so a caller can judge the match rather than trust a label. scheduled_at carries both `utc` and `et`; econ releases use the standing BLS/Census 8:30am ET convention (FRED's calendar itself has no clock time), FOMC decisions use the 2:00pm ET convention, and FDA/SEC dates are date_only:true (no reliable clock time exists for either). DO NOT treat a matched market as a real arbitrage or a settled fact on its own — a market question sharing tokens with a release name is not proof it settles on that release's own published number. Call resolution_audit / resolution_diff (fleet #1909) on a specific market before sizing anything here. An empty window (zero releases across every requested category) returns the SAME shape as a populated one — release_count:0, releases:[] — plus empty_reason:"no_releases_in_window" and a `hint` telling you to widen, so you never branch on the response shape and never have to guess whether zero means "nothing is scheduled" or "the lookup failed". Econ releases especially cluster on specific dates each month, so a 48h window often straddles a dead stretch.
company_register_searchremovedSearch the NATIONAL BUSINESS REGISTERS by company name and get the register's own id back — a Companies House number, a Norwegian organisasjonsnummer, a Finnish business id, a SIREN, a Japanese corporate number, an Estonian registry code, a CNPJ, or an LEI. Use this when you want the OFFICIAL REGISTERED ENTITY and the country is not the US, or when you do not know which country it is. Registers searched: Companies House (GB), Enhetsregisteret (NO), PRH/YTJ (FI), Sirene (FR), 法人番号公表サイト (JP), RIK e-Business Register (EE), and the GLEIF LEI crosswalk, which reaches jurisdictions we have no register pack for (DE, SE, AU, SG...). THIS TOOL REFUSES TO GUESS, and that is its point: when two different companies match a name equally well it answers `match_status: "ambiguous"` with BOTH, rather than naming one. A one-word trading name usually IS ambiguous — "Bolt", "Apple", "Next", "Sea", "DNB" each match a well-known group AND unrelated micro-entities whose registered name is exactly that word — so pass `country` when you know it. Every response names EVERY register it asked under `searched[]`, with that register's own as-of date and row count, and a register that could not be reached carries an `error` there rather than reading as zero rows: "we could not ask Companies House" is never the same answer as "this company is not in Britain". `related[]` holds entities that collapsed INTO the match — the same company seen through another register, or another country's arm sharing its LEI — so a multinational returns one answer rather than tying with itself. NOT A PEOPLE SEARCH: sole traders and other natural persons are excluded on the publisher's own legal-form field, never guessed from the shape of a name. For US public companies prefer resolve_entity (CIK + ticker + FIGI); the two share this same matcher, and resolve_entity returns these register fields too.
company_factsremovedTYPED, DETERMINISTIC financial facts for a US public company for an EXPLICITLY NAMED reporting period — "Apple revenue for fiscal 2023", "Walmart net income FY2026 Q3", "Microsoft cash at the end of fiscal 2024". PREFER OVER entity_profile / get_company_financials whenever the period matters: those answer "the most recent figures" and will happily hand back FY2025 when you asked about FY2019, and neither separates a discrete quarter from a year-to-date figure. This one refuses instead — it NEVER substitutes the latest period for the period requested, NEVER returns 0 for missing data, NEVER lets a 9-month YTD number answer a quarterly question, and NEVER converts a currency. Every answer carries the exact us-gaap concept it came from, what that concept MEASURES (NetIncomeLoss excludes non-controlling interests, ProfitLoss includes them — not synonyms), the accession number and a link to the filing on sec.gov, the restatement trail of any superseded figures, and a contract + derivation version to pin against. Fiscal periods are the FILER'S OWN, anchored on their fiscal-year end, so Walmart's year ending 2026-01-31 is FY2026 and Apple's ending 2025-09-27 is FY2025. Attributes: revenue, net_income, cash, gross_profit, operating_income, eps_diluted, capex, operating_cash_flow, long_term_debt, shares_outstanding (the dei COVER-PAGE share count, so its period end is the cover date, after the quarter closed — that is the most current count the filing carries). Units are not all USD: shares_outstanding is in `shares` with currency null, eps_diluted in `USD/shares`. A discrete quarter the filer never filed — every Q4, and Q2/Q3 of cash-flow lines, which are filed year-to-date — is DERIVED as YTD(q) minus YTD(q-1) and comes back with `reported: false`, the subtraction named in `derivation` (fy_minus_9m / ytd_9m_minus_6m / ytd_6m_minus_3m) and both legs with their filings in `derived_from`; test `reported` if you will only accept a figure lifted from a filing. Per-share and balance-sheet figures are NEVER derived. Every non-answer is a named status — `unavailable` (the filer did not report it for that period; the periods that DO exist are listed, without values), `unsupported` (outside what v1 covers — a non-us-gaap filer, an unknown attribute, a non-USD unit), `ambiguous` (the company name matched two filers equally well; both are named), `conflicting` (two filings the same day disagree; both are returned and neither is picked), `partial` (a value with no accession behind it). Source: SEC EDGAR, XBRL financial facts, one publisher read once — see `corroboration`. Same response is served at POST https://gateway.pipeworx.io/v1/facts for non-MCP callers.
suggest_questionsremovedWhat can I ask Pipeworx? / what is Pipeworx good for? / what can you do? / give me ideas / show me examples / getting started / what data do you have? — the onboarding entry point for an agent that just connected and wants to know what is worth asking. Returns category-bucketed example questions (company financials, drugs & clinical trials, economics, real estate, prediction markets, weather, government & patents, science & academia, news) — each with the exact tool + argument shape that answers it, drawn from the live catalog of thousands of tools. Call with no arguments for the full spread, or pass `topic` (e.g. "finance", "pharma", "betting") to focus. Use this FIRST when you do not yet know what Pipeworx can do for you, or to learn how to call the meta-tools (ask_pipeworx, entity_profile, compare_entities, etc.).
archive_compareremovedWhat changed on a web page between two dates? Resolves the archived capture nearest each date (Internet Archive Wayback Machine, Common Crawl, Arquivo.pt), extracts the readable text of both, and returns a text-level diff: the segments removed and added, a similarity score, and both capture timestamps with their gaps from the requested dates. It diffs readable text, not markup, so a restyled page with the same words reads changed:false. Identical captures answer changed:false with the reason (same capture, identical content digest, or identical text), never an empty diff. A date with no capture within max_gap_days (default 30) answers status "no_capture", naming which side is missing and the nearest captures to it. Typical uses: how a privacy policy, terms of service, pricing or product page changed; whether a statement was on a page at a given time.
archive_evidenceremovedWhat did a web page say on a given date? Finds the archived capture of a URL nearest that date across the Internet Archive Wayback Machine, Common Crawl and Arquivo.pt, reads it, and returns the readable text (HTML stripped) with the capture timestamp, a link to the archived copy, and the GAP between the date asked for and the capture actually used (e.g. "Captured 1.5 day(s) before the requested date"). One call replaces the find-capture, fetch-record, parse-HTML chain. If no archive holds a capture within max_gap_days (default 30) it answers status "no_capture" and names the nearest capture before and after the date with their gaps, so a distant capture is never passed off as the page on that date. Every archive's outcome is listed in sources[]; one that timed out or errored says so with its upstream status, and if all of them failed the answer is error "archives_unavailable", not no_capture. Captures are immutable and cached by capture id; served_from says whether the text came from cache or upstream. Use archive_compare to see what changed between two dates.
Showing the latest 10. Full history: list_changes · trend: quality JSON.
Checks run on what our credential-free, read-only probes observe; tools are never called and no code audit is performed. How it is computed.
+repository +namespace-matches-repo +website +reachable +uptime-96% +updated-2d-ago
Derived from observable signals (official registry feed and our own credential-free probes); no code audit performed. How it is computed.
| remote | auth | reachable | uptime 30d | p50 | protocol | last ok |
|---|---|---|---|---|---|---|
https://gateway.pipeworx.io/ecb/mcp streamable-http | none | yes | 96% | 48 ms | 2025-03-26 | 2026-10-19 |
No tools observed. Tools appear once a credential-free probe can list them.
Schemas: list_tools.
And 1,847 more from this publisher.
{
"name": "io.github.pipeworx-io/ecb",
"title": "Ecb",
"$schema": "https://static.modelcontextprotocol.io/schemas/2025-12-11/server.schema.json",
"remotes": [
{
"url": "https://gateway.pipeworx.io/ecb/mcp",
"type": "streamable-http"
}
],
"version": "0.1.3",
"repository": {
"url": "https://github.com/pipeworx-io/mcp-ecb",
"source": "github"
},
"websiteUrl": "https://pipeworx.io/packs/ecb",
"description": "ECB Data Portal MCP — European Central Bank statistical data"
}