Skip to main content
Glama

Server Details

CTA MCP — Chicago Transit Authority real-time trains ('L') + buses

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
20.5% over 62 days
Last Tested
Transport
Streamable HTTP
URL
Repository
pipeworx-io/mcp-cta
GitHub Stars
0
Server Listing
mcp-cta

TDQS

A3.8/5.0

Scored across 45 tools

Disambiguation3/5

The four router tools (ask_pipeworx, ask_pipeworx_beta, ask_pipeworx_grounded, deep_research) heavily overlap — beta is explicitly stated to currently be identical to the stable router — and the prediction-market cluster (polymarket_arbitrage, polymarket_edges, polymarket_edge_tracker, polymarket_fill_risk, polymarket_kalshi_spread, bet_research, kalshi_weather_edge) has fuzzy boundaries. The extremely verbose descriptions do a lot to steer selection (e.g. entity_profile vs company_facts vs recent_changes), and the CTA transit tools are cleanly distinct, but several tools still require careful reading to tell apart.

Naming Consistency3/5

Casing is uniformly snake_case, which is a plus, but verb/noun ordering and prefixes are inconsistent: verb-first (validate_claim, scan_dependency, generate_llms_txt, resolve_entity) mixed with noun-first (company_facts, entity_profile, cta_bus_positions), plus bare verbs (remember, recall, forget, subscribe, unsubscribe) and an inconsistent pipeworx_ prefix applied to only some meta tools. Readable but no single predictable pattern.

Tool Count2/5

45 tools is far above the well-scoped range and places a heavy selection burden on the agent, which is compounded by the overlapping router and prediction-market families. The gateway scope (many domains: SEC, FRED, FDA, patents, Polymarket/Kalshi, CTA transit, memory, subscriptions) explains some of the breadth, but several tools are redundant or experimental.

Completeness4/5

As a universal data gateway the surface is broad and well-rounded: discovery (discover_tools, suggest_questions, pipeworx_trending), identity resolution, cross-source profiles/comparisons, research, market analysis, memory, subscriptions, alerts, and feedback are all present. Minor gaps remain — no generic resource-read for arbitrary pipeworx:// URIs and a few niche domains rely on fallthrough routing — but core agent workflows are covered.

Tool Schema Changelog

Recent tool additions, removals, and schema changes observed during successful MCP inspections.

  1. 12 tool updates
    • Addedarchive_compare
    • Addedarchive_evidence
    • Changedask_pipeworx1 field changed
      • addedInput schema / properties / packs
        Added 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"
        +}
    • Changedask_pipeworx_beta1 field changed
      • addedInput schema / properties / packs
        Added 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"
        +}
    • Changedask_pipeworx_grounded1 field changed
      • addedInput schema / properties / prefer_tool
        Added 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"
        +}
    • Addedclassify_row
    • Addedcompany_register_search
    • Changedentity_profile2 fields changed
      • addedInput schema / properties / country
        Added 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"
        +}
      • changedInput schema / properties / value / description
        Previous 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`."
    • Changedrelease_calendar_markets2 fields changed
      • addedOutput schema / properties / empty_reason
        Added value: +{
        +  "description": "Present ONLY on a zero-release window: \"no_releases_in_window\". The window was queried and nothing is scheduled — this is an answer, not a failure.",
        +  "type": "string"
        +}
      • addedOutput schema / properties / hint
        Added value: +{
        +  "description": "Present ONLY on a zero-release window: what to change (usually a wider `hours`).",
        +  "type": "string"
        +}
    • Addedresearch_row
    • Changedresolve_entity2 fields changed
      • addedInput schema / properties / country
        Added 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"
        +}
      • changedOutput 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"
        +}
    • Changedsubscribe2 fields changed
      • changedInput schema / properties / params / description
        Previous 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. tech_change: {domains:[\"acme.com\",\"example.org\"], technologies?:[\"Shopify\",\"Segment\"]} — domains required (1-200), technologies optional (exact names, case-insensitive) to narrow which detected technologies alert. Unknown keys in form_d/news_keyword/job_post/tool_diff/new_entity/tech_change params are rejected at subscribe time."
      • changedInput schema / properties / type / enum
        Previous 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",
        +  "tech_change"
        +]
  2. 35 tool updates
    • Changedai_visibility_check1 field changed
      • addedInput schema / examples
        Added value: +[
        +  {
        +    "entity": "Tesla"
        +  }
        +]
    • Changedask_pipeworx3 fields changed
      • addedInput schema / properties / ask
        Added value: +{
        +  "description": "Alias for question.",
        +  "type": "string"
        +}
      • addedInput schema / properties / message
        Added value: +{
        +  "description": "Alias for question.",
        +  "type": "string"
        +}
      • changedInput schema / properties / question / description
        Previous 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."
    • Changedask_pipeworx_beta4 fields changed
      • addedInput schema / examples
        Added value: +[
        +  {
        +    "question": "What is the current US unemployment rate?"
        +  }
        +]
      • addedInput schema / properties / ask
        Added value: +{
        +  "description": "Alias for question.",
        +  "type": "string"
        +}
      • addedInput schema / properties / message
        Added value: +{
        +  "description": "Alias for question.",
        +  "type": "string"
        +}
      • changedInput schema / properties / question / description
        Previous 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."
    • Changedask_pipeworx_grounded4 fields changed
      • addedInput schema / examples
        Added value: +[
        +  {
        +    "question": "What was Apple's fiscal 2023 revenue?"
        +  }
        +]
      • addedInput schema / properties / ask
        Added value: +{
        +  "description": "Alias for question.",
        +  "type": "string"
        +}
      • addedInput schema / properties / message
        Added value: +{
        +  "description": "Alias for question.",
        +  "type": "string"
        +}
      • changedInput schema / properties / question / description
        Previous 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."
    • Changedbet_research2 fields changed
      • changedInput schema / examples
        Previous 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": "will-kristi-noem-win-the-2028-republican-presidential-nomination"
        +  },
        +  {
        +    "market": "https://polymarket.com/event/will-kristi-noem-win-the-2028-republican-presidential-nomination"
        +  }
        +]
      • changedInput schema / properties / market / description
        Previous 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 (\"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."
    • Addedcompany_facts
    • Changedcompare_entities1 field changed
      • addedInput schema / examples
        Added value: +[
        +  {
        +    "type": "company",
        +    "values": [
        +      "AAPL",
        +      "MSFT"
        +    ]
        +  }
        +]
    • Changedcta_bus_positions1 field changed
      • changedInput schema / examples
        Previous value: -[
        -  {
        -    "_apiKey": "your-cta-api-key",
        -    "route": "22"
        -  }
        -]New value: +[
        +  {
        +    "route": "22"
        +  }
        +]
    • Changedcta_bus_predictions1 field changed
      • changedInput schema / examples
        Previous value: -[
        -  {
        -    "_apiKey": "your-cta-api-key",
        -    "route": "22",
        -    "stop_id": "1926"
        -  },
        -  {
        -    "_apiKey": "your-cta-api-key",
        -    "direction": "Northbound",
        -    "find_stop": "clark & madison",
        -    "route": "66"
        -  }
        -]New value: +[
        +  {
        +    "route": "22",
        +    "stop_id": "1926"
        +  },
        +  {
        +    "direction": "Northbound",
        +    "find_stop": "clark & madison",
        +    "route": "66"
        +  }
        +]
    • Changedcta_train_arrivals1 field changed
      • changedInput schema / examples
        Previous value: -[
        -  {
        -    "_apiKey": "your-cta-api-key",
        -    "route": "Red",
        -    "station": "Belmont"
        -  },
        -  {
        -    "_apiKey": "your-cta-api-key",
        -    "max": 5,
        -    "station": "Clark/Lake"
        -  }
        -]New value: +[
        +  {
        +    "route": "Red",
        +    "station": "Belmont"
        +  },
        +  {
        +    "max": 5,
        +    "station": "Clark/Lake"
        +  }
        +]
    • Changedcta_train_positions1 field changed
      • changedInput schema / examples
        Previous value: -[
        -  {
        -    "_apiKey": "your-cta-api-key",
        -    "routes": "Red,Blue"
        -  }
        -]New value: +[
        +  {
        +    "routes": "Red,Blue"
        +  }
        +]
    • Changeddeep_research9 fields changed
      • addedInput schema / examples
        Added value: +[
        +  {
        +    "depth": "quick",
        +    "question": "What is the current US unemployment rate and how has it changed over the past year?"
        +  }
        +]
      • addedInput schema / properties / ask
        Added value: +{
        +  "description": "Alias for question.",
        +  "type": "string"
        +}
      • addedInput schema / properties / input
        Added value: +{
        +  "description": "Alias for question.",
        +  "type": "string"
        +}
      • addedInput schema / properties / message
        Added value: +{
        +  "description": "Alias for question.",
        +  "type": "string"
        +}
      • addedInput schema / properties / prompt
        Added value: +{
        +  "description": "Alias for question.",
        +  "type": "string"
        +}
      • addedInput schema / properties / q
        Added value: +{
        +  "description": "Alias for question.",
        +  "type": "string"
        +}
      • addedInput schema / properties / query
        Added value: +{
        +  "description": "Alias for question.",
        +  "type": "string"
        +}
      • changedInput schema / properties / question / description
        Previous 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."
      • addedInput schema / properties / text
        Added value: +{
        +  "description": "Alias for question.",
        +  "type": "string"
        +}
    • Changedentity_profile1 field changed
      • addedInput schema / examples
        Added value: +[
        +  {
        +    "type": "company",
        +    "value": "AAPL"
        +  }
        +]
    • Changedforget4 fields changed
      • addedInput schema / properties / k
        Added value: +{
        +  "description": "Alias for key.",
        +  "type": "string"
        +}
      • changedInput schema / properties / key / description
        Previous value: -"Memory key to delete"New value: +"Memory key to delete. Accepts name, k, label as aliases."
      • addedInput schema / properties / label
        Added value: +{
        +  "description": "Alias for key.",
        +  "type": "string"
        +}
      • addedInput schema / properties / name
        Added value: +{
        +  "description": "Alias for key.",
        +  "type": "string"
        +}
    • Changedgenerate_llms_txt1 field changed
      • addedInput schema / examples
        Added value: +[
        +  {
        +    "url": "https://pipeworx.io"
        +  }
        +]
    • Addedkalshi_weather_edge
    • Changedpipeworx_feedback1 field changed
      • addedInput schema / examples
        Added value: +[
        +  {
        +    "message": "Fleet #2184 smoke test: verifying pipeworx_feedback example call returns non-empty.",
        +    "type": "other"
        +  }
        +]
    • Changedpipeworx_trending1 field changed
      • addedInput schema / examples
        Added value: +[
        +  {
        +    "window": "7d"
        +  }
        +]
    • Changedpolymarket_arbitrage1 field changed
      • addedInput schema / examples
        Added value: +[
        +  {
        +    "topic": "Fed rate decision"
        +  }
        +]
    • Changedpolymarket_edge_tracker1 field changed
      • addedInput schema / examples
        Added value: +[
        +  {
        +    "days": 14,
        +    "window": "1wk"
        +  }
        +]
    • Changedpolymarket_edges3 fields changed
      • addedInput schema / examples
        Added value: +[
        +  {
        +    "limit": 5,
        +    "window": "1wk"
        +  }
        +]
      • changedInput schema / properties / min_edge_pp / description
        Previous 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."
      • changedInput schema / properties / slippage_pp / description
        Previous 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."
    • Changedpolymarket_fill_risk1 field changed
      • addedInput schema / examples
        Added value: +[
        +  {
        +    "market": "will-the-fed-increase-interest-rates-by-25-bps-after-the-december-2026-meeting-20260729232808636",
        +    "side": "buy_yes",
        +    "size_usd": 1000
        +  }
        +]
    • Changedpolymarket_kalshi_spread2 fields changed
      • changedInput schema / examples
        Previous value: -[
        -  {
        -    "topic": "fed"
        -  },
        -  {
        -    "topic": "btc"
        -  }
        -]New value: +[
        +  {
        +    "topic": "fed"
        +  },
        +  {
        +    "topic": "btc"
        +  },
        +  {
        +    "topic": "bitcoin"
        +  },
        +  {
        +    "topic": "fed rate decision"
        +  }
        +]
      • changedInput schema / properties / topic / description
        Previous 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."
    • Changedrecall4 fields changed
      • addedInput schema / properties / k
        Added value: +{
        +  "description": "Alias for key.",
        +  "type": "string"
        +}
      • changedInput schema / properties / key / description
        Previous 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."
      • addedInput schema / properties / label
        Added value: +{
        +  "description": "Alias for key.",
        +  "type": "string"
        +}
      • addedInput schema / properties / name
        Added value: +{
        +  "description": "Alias for key.",
        +  "type": "string"
        +}
    • Changedrecent_changes1 field changed
      • addedInput schema / examples
        Added value: +[
        +  {
        +    "since": "30d",
        +    "type": "company",
        +    "value": "AAPL"
        +  }
        +]
    • Addedrelease_calendar_markets
    • Changedremember10 fields changed
      • addedInput schema / examples
        Added value: +[
        +  {
        +    "key": "target_ticker",
        +    "value": "AAPL"
        +  }
        +]
      • addedInput schema / properties / content
        Added value: +{
        +  "description": "Alias for value.",
        +  "type": "string"
        +}
      • addedInput schema / properties / data
        Added value: +{
        +  "description": "Alias for value.",
        +  "type": "string"
        +}
      • addedInput schema / properties / k
        Added value: +{
        +  "description": "Alias for key.",
        +  "type": "string"
        +}
      • changedInput schema / properties / key / description
        Previous 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."
      • addedInput schema / properties / label
        Added value: +{
        +  "description": "Alias for key.",
        +  "type": "string"
        +}
      • addedInput schema / properties / name
        Added value: +{
        +  "description": "Alias for key.",
        +  "type": "string"
        +}
      • addedInput schema / properties / text
        Added value: +{
        +  "description": "Alias for value.",
        +  "type": "string"
        +}
      • addedInput schema / properties / v
        Added value: +{
        +  "description": "Alias for value.",
        +  "type": "string"
        +}
      • changedInput schema / properties / value / description
        Previous 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."
    • Addedresolution_audit
    • Addedresolution_diff
    • Changedresolve_entity1 field changed
      • addedInput schema / examples
        Added value: +[
        +  {
        +    "type": "company",
        +    "value": "AAPL"
        +  }
        +]
    • Changedscan_competitor_ai_presence1 field changed
      • addedInput schema / examples
        Added value: +[
        +  {
        +    "entities": [
        +      "Pipeworx",
        +      "Zapier"
        +    ]
        +  }
        +]
    • Changedscan_dependency1 field changed
      • addedInput schema / examples
        Added value: +[
        +  {
        +    "package": "left-pad"
        +  }
        +]
    • Changedsearch_within1 field changed
      • addedInput schema / examples
        Added 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."
        +  }
        +]
    • Changedsuggest_questions1 field changed
      • addedInput schema / examples
        Added value: +[
        +  {
        +    "topic": "finance"
        +  }
        +]
    • Changedvalidate_claim1 field changed
      • addedInput schema / examples
        Added value: +[
        +  {
        +    "claim": "Apple's fiscal 2023 revenue was $383 billion"
        +  }
        +]
  3. 1 tool update
    • Changedentity_profile3 fields changed
      • changedInput schema / properties / type / description
        Previous 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."
      • changedInput schema / properties / type / enum
        Previous value: -[
        -  "company"
        -]New value: +[
        +  "company",
        +  "ticker"
        +]
      • changedInput schema / properties / value / description
        Previous 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."
  4. 1 tool update
    • Changedresolve_entity1 field changed
      • changedInput schema / properties / value / description
        Previous value: -"For company: ticker (AAPL), CIK (0000320193), or name. For drug: brand or generic name (e.g., \"ozempic\", \"metformin\")."New value: +"For company: ticker (AAPL), CIK (0000320193), or name. For drug: brand or generic name (e.g., \"ozempic\", \"metformin\"). Pass the ENTITY NAME ONLY — for a bond that is the ISSUER exactly as printed (\"NEW YORK ST DORM AUTH\"), never the question's full noun phrase (\"NEW YORK ST DORM AUTH revenue bonds\"): the FIGI lookup matches instrument names, so trailing security-class words match nothing."

Related MCP Connectors

Related MCP Servers

  • F
    license
    A
    quality
    D
    maintenance
    Wraps the CTA Bus Tracker API to provide live access to bus routes, stops, predictions, vehicle locations, patterns, and detours via MCP clients.
    11
    -
  • A
    license
    A
    quality
    C
    maintenance
    Enables real-time bus and light rail departure lookups, route and station search, and service alerts for Minneapolis–Saint Paul Metro Transit through MCP.
    6
    MIT
Try in Browser

Glama MCP Gateway

Add one secure layer between your agents and this server.