"osu!" matching MCP tools:
- Find 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.ConnectorNo auth
- Read policy/template identities, verified snapshots, confirmations or editable settings. Reading never opens a human card, saves a change or activates a policy. Use get_business_change for cross-resource activity and goal/budget approval requests. ### Select evidence - list: discover recorded identities; keep one row’s kind/moduleKey/policyKey together. - current: read that identity’s attestation-checked, sensitive-field-redacted snapshot. An unavailable policyVersion never falls back. Templates can pin only their current confirmation. - history: inspect confirmations for one known identity. - editable: discover supported settings, including unconfigured ones absent from list. proposed is guidance, never user intent. ### Continue or prepare List cursors and history offsets are separate continuations. Live history inserts can shift pages; deduplicate receiptId. For prepare_business_policy, copy moduleKey/policyKey/opaque expectedRevision from one editable option. Numeric policyVersion is not that write hash. Deactivation requires the same option’s canDeactivate=true. Unrecorded evidence stays unknown; failed reads prove no absence. Requires policy:read and current policies Owner access. Editable additionally requires policy:write and native module authority.ConnectorOAuth
- Preview an explicitly requested policy configuration, replacement or deactivation for human Owner confirmation. Read get_business_policies(view=editable) first; get_business_policies(view=current) and get_business_policies(view=history) verify confirmed results. ### Build one draft Choose one editable option and keep its moduleKey/policyKey/expectedRevision together. - replace (default): edit a copy of before into the complete requested value, preserving settings the user wants unchanged. A one-field value replaces the policy; it does not patch that field. If before=null, supply a complete first configuration using that option’s revision. proposed is guidance, never user intent. - deactivate: require canDeactivate=true and omit value. The adapter constructs the disabled state; do not invent an enabled flag. Other settings/history survive, and running or sent work is not cancelled. ### Human handoff Nothing is queued or saved. Present the preview’s exact nextAction.arguments unchanged on the existing human Owner card; only a human confirms. Already inactive has no card or new version. Stale input requires a fresh read and renewed intent. Invalid/unsupported input or unconfigured deactivation fails without persistence. After confirmation or uncertainty, read state/history; never retry confirmation. Unsaved previews are absent from get_business_change. Requires policy:read/write and current Owner/module authority.ConnectorOAuth
- Read workspace identity, discover capabilities or find existing role positions. For company records use get_business_funnel, get_business_goals or get_business_budgets. Choose a view - identity: context/profile without catalog reads; omit names, domain and detail. - discovery (default): inspect capabilityCatalog. summary gives names/access; full adds descriptions and available schemas, never permissions. names and domain intersect. For a policy use names=["get_business_policies"], domain="policy"; domain="business" excludes it. Empty filtered results do not prove absence. - roles: minimal roleDirectory keys/titles without profile/catalog. Requires existing work:read and current Workspace read authority. Omit catalog filters. Pages are live and ordered by roleKey; pass nextRoleKey as afterRoleKey while hasMore. Interpretation profile.id is workspace-bound and opaque, not a native user ID. missingScopes/access.nextAction identify unmet catalog prerequisites. Role discovery grants no allocation authority. Authentication failures are errors; this read cannot sign in, switch tenants or grant access. Each later action rechecks authority.ConnectorOAuth
- Edit endpoint registry metadata; physical actions use control. Read endpoint ID, document and etag first. Metadata replacement requires complete name/type/enablement, etag and idempotencyKey; rename/type/disabled state survives rediscovery. Disabled endpoints remain explicitly readable but reject controls. DELETE may be rediscovered. MERGE_INTO disables the source and moves supported references; it creates no ID alias and preserves target enablement. Two simulator endpoints cannot merge (409 CONFLICT); disable/delete the duplicate instead. Confirm exact identity and explain MERGE_INTO/DELETE effects; matching names do not prove duplicates.ConnectorDestructiveOAuth
- Edit endpoint registry metadata; physical actions use control. Read endpoint ID, document and etag first. Metadata replacement requires complete name/type/enablement, etag and idempotencyKey; rename/type/disabled state survives rediscovery. Disabled endpoints remain explicitly readable but reject controls. DELETE may be rediscovered. MERGE_INTO disables the source and moves supported references; it creates no ID alias and preserves target enablement. Two simulator endpoints cannot merge (409 CONFLICT); disable/delete the duplicate instead. Confirm exact identity and explain MERGE_INTO/DELETE effects; matching names do not prove duplicates.ConnectorDestructiveOAuth
Matching MCP Servers
- AlicenseNot gradedqualityCmaintenanceMCP server that exposes the osu! API v2 as tools, allowing natural language queries about osu! profiles, beatmaps, rankings, and more.25 PyPIMIT
- AlicenseCqualityDmaintenanceProvides over 50 tools across 14 categories for accessing Ohio State University services including transportation, academics, dining, and events.494MIT
Matching MCP Connectors
- Samuelz Business OSOAuth
Know where your business stands and what needs attention next. Review available inquiry and paid-work records, goals and recorded spending from your connected workspace. See what needs attention and which conclusions the data cannot yet support. Create non-money goals on explicit request. Revenue targets and increased spending limits require owner approval. Requires a Samuelz account with the relevant Business OS modules. Data coverage depends on connected sources; missing data stays unknown. OAuth access remains bound to one workspace and its current permissions. By Glöggl GmbH.
- Port OS Smart HomeOAuth
Control your existing Philips lights, Sonos speakers, Roborock vacuums and other supported devices through Port OS cloud. Give ChatGPT, Claude and other MCP-compatible assistants access to the devices you connect. Turn off the living room lights, play music on your speakers, adjust the thermostat, run a vacuum in a room, check a camera snapshot or find a connected tracker. Available actions depend on your linked provider accounts and each device’s supported capabilities. Port OS runs in the cloud; no local server is required. You choose the account, device and capability permissions each assistant receives. Device operations require user OAuth; public tool discovery does not grant device access. Port OS is in alpha. Setup: https://portoperatingsystem.com/docs/getting-started/ Support: https://portoperatingsystem.com/contact/
- Read a goal’s definition, current progress or recorded definition changes. Use get_business_change to locate activity across resources or recover approval requests; use this tool once the goal is known. ### Choose the evidence - To find active goals, call without selectors. includeArchived extends discovery to retired goals. - To inspect one goal before editing, copy its goalId into an exact read; that read also finds archived goals. - To compare recorded definitions, use view=history with goalId. A historical target is not a stored historical progress measurement. ### Complete the task For a duplicate check, traverse every active page while hasMore. For inspecting a known goal, use its ID rather than repeatedly listing. Smaller list pages calculate progress for fewer goals, so a partial page cannot prove no other goal exists. Live inserts can shift pages. Progress is recomputed within the reporting span. Missing sources or unsupported segments leave started periods unknown. Additive metrics read zero before the span begins, meaning no in-period events yet. Storage/evidence failures are errors. Read the current revision before update_business_goal/archive_business_goal; create_business_goal creates a separate goal. get_business_funnel supplies source evidence and get_business_budgets spending controls. Requires accounting:read, operations:read and current access.ConnectorOAuth
- Archive one explicitly selected goal from active tracking. These lifecycle tools cannot restore an archived goal. Read get_business_goals(goalId) first; use update_business_goal for definition changes. Request: - A new intent needs the current expectedRevision and a fresh requestKey, unique across this actor/workspace’s goal create/update/archive operations, not merely per goal. - An exact replay keeps its original requestKey and expectedRevision even after the stored revision changes. Substituting a newer revision under that key is a conflict. - A receipt describes the original result, not current goal/proposal state. After uncertainty or replay, read get_business_goals(goalId), which includes archived records. Results: - Non-money: status=archived and activates=false; the output schema describes the retained goal/revision. - Money goal: owner_approval_required and the existing human-card continuation; never call confirm_business_change. - Rejected: no change; read the reason. Requires current operator:prepare, accounting:read and operations:read authority. History and references remain; archiving does not delete the goal or cancel work orders, steering baselines, budgets or provider actions.ConnectorDestructiveOAuth
- Prices Kalshi daily high-temperature markets against the NWS forecast for the market's OWN settlement station, and measures whether that forecast actually beats the market. Two modes. LIVE (default): returns the full strike ladder for one city and settlement date with market_prob (mid), forecast_prob, and edge_pp per strike, plus the settlement clause verbatim. BACKTEST (`backtest_days: N`): scores an archived gridded forecast against the market on settled days and returns brier_market vs brier_forecast with a plain-English `verdict`, so the edge is MEASURED rather than asserted. READ THE WARNINGS — they are not boilerplate. (1) These markets DO NOT settle on the NWS. They settle on The Weather Company (weather.com) at a Kalshi station code such as CLINYC, which the response quotes verbatim; so part of every edge_pp is NWS-vs-Weather-Company disagreement about the same day at the same station, which is not mispricing and not tradeable. `settlement_vs_forecast_basis_f` from backtest mode is that part as a number. (2) The station is DERIVED from the settlement clause, never from the city name: Chicago settles at MIDWAY and New York at CENTRAL PARK, so a city-centre forecast would misprice a whole ladder. A station that cannot be resolved yields rows with no forecast and a reason, never a guessed coordinate. (3) forecast_prob assumes a normal distribution around the NWS high whose width is ASSUMED, not fitted (stated in `distribution_assumption`) — run backtest mode to see whether it is calibrated. (4) edge_pp is gross: no Kalshi fees, no bid-ask. MEASURED RESULT, AND IT IS NOT THE FLATTERING ONE: on the first backtest (KXHIGHNY, 13 settled days to 2026-09-11, 58 market observations) the MARKET beat the forecast — Brier 0.1008 for the market against 0.1594 for the archived gridded forecast, lower being better. So on that sample there is NO forecast edge to sell, and a large edge_pp is more likely to be the model disagreeing with a better-informed market than an opportunity. The measured settlement-vs-forecast basis was 1.7F mean absolute over 8 pinnable days, slightly warm-biased, which is a big share of a typical edge_pp on a 2-degree bracket. Re-run backtest_days before believing any edge; if a later sample reverses this, the numbers say so. NWS is US-only, so the ~30 international Kalshi weather series (London, Paris, Tokyo) return market prices with forecast_unavailable rather than a forecast. Precipitation series are listed but not yet priced. Cities: nyc, chicago, los angeles, miami, austin, houston, denver, philadelphia — or pass `series_ticker` for any other (e.g. "KXHIGHTBOS").ConnectorNo auth
- Claygent-style per-row research: answer ONE question about ONE company and return a JSON object matching your output_schema, with every field wrapped in its own evidence — {value, evidence_url, quote, status}. status is NEVER self-reported by the model: "found" means this code independently verified the model's quote is a VERBATIM substring of text actually fetched; "inferred" means a value was given but the quote could not be verified; "not_established" means no source answered the field, and its value is always null — never guessed, never a blended score. Sources: "web" fetches the company's own site (entity.domain required — homepage, /about, /leadership) via fetch_url; "catalog" checks entity_profile (SEC EDGAR; resolved:false for a private company is expected, not a failure); "both" (default) tries both. max_cost (USD, default 0.02, max 0.50) scales how many pages are fetched and refuses up front if it is too small to pay for even one extraction call (floor $0.002) — never silently overspends. A row where every source comes back empty costs nothing: every field is mechanically not_established with NO model call made. For a boolean/derived field (e.g. "does this company sell to healthcare"), the quote only has to SUPPORT the value — a descriptive sentence about customers/products counts, the source need not state the answer verbatim. leadership_page_status ("fetched"|"not_found"|"not_attempted", plus leadership_note) says plainly whether a leadership/team page was actually read, so a named-person field (head_of_sales) coming back not_established is distinguishable from "this company just doesn't publish one" vs. "we never checked". model_output_empty:true means the model returned nothing usable (a transport/budget problem) — every field is not_established for THAT reason, never read as 20 individual "no" judgments. Use with a fixed question + schema across many rows for "Claygent over N companies with a hard cost cap" (composes with batch callers). For picking from a fixed label list instead of extracting open fields, use classify_row (cheaper, one model call).ConnectorNo auth
- Tell the Pipeworx team something is broken, missing, or needs to exist. Use when a tool returns wrong/stale data (bug), when a tool you wish existed isn't in the catalog (feature/data_gap), or when something worked surprisingly well (praise). ONLY for tools served by this Pipeworx connection — if the tool came from a different MCP server in your client (another vendor's Gmail, Splunk, Slack, etc. connector), we cannot fix it and reporting it here only delays you; file it with that server instead. Not sure? Pipeworx tool names are the ones this connection lists. Describe the issue in terms of Pipeworx tools/packs — don't paste the end-user's prompt. Filing without an account returns a `claim_token`; pass it back later as pipeworx_feedback({claim_token:"pwfb_…"}) to read whether it was fixed and what changed. The team reads digests daily and signal directly affects roadmap. Rate-limited to 5 per identifier per day. Free; doesn't count against your tool-call quota.ConnectorNo auth
- Find nearby places on OpenStreetMap (cafes, ATMs, shops, parks, etc.). CRITICAL: The 'tags' argument MUST be passed as a single stringified JSON text block, NOT a nested JSON object. Example: "{\"amenity\":\"cafe\"}" USE FOR: - "Find a cafe near X" - "Are there any ATMs close to Y?" - "Show me supermarkets near Z" NOT FOR: directions, geocoding, Wikipedia, isochrones. EXAMPLE: User: "Find cafes near Koper station" → --lat 45.548 --lon 13.730 --tags '{"amenity":"cafe"}' --dist 300 COMMON TAGS: amenity: cafe, restaurant, atm, pharmacy, parking shop: supermarket, bakery, convenience tourism: hotel, museum, attractionConnectorNo auth
- "Compare X and Y" / "X vs Y" / "X versus Y" / "which is bigger / better / larger / more profitable" / "rank these companies" / "head to head" — side-by-side comparison of 2–5 companies or drugs in ONE parallel call. ALWAYS PREFER over sequential single-pack lookups when comparing entities. type="company" pulls LATEST 10-K revenue + operating income + net income + cash + long-term debt from SEC EDGAR/XBRL (off-calendar fiscal years handled correctly — AAPL Sep, NVDA Jan, etc.). type="drug" pulls FAERS adverse-event counts, FDA approval counts, active trial counts. Results sorted by primary metric so "largest" / "most" / "biggest" reads off the top of the response. Returns paired data + pipeworx:// citation URIs per entity. Replaces 8–15 sequential lookups.ConnectorNo auth
- Issues a key so a script — a nightly import, a till, a bank feed — can work in one company without a person signing in. It carries an explicit list of capabilities and nothing else, it can never reach another company, and it cannot hold a capability you do not hold yourself — at issuance and at every use: if you lose a capability or leave the company, the key loses it too. Its posting_mode is fixed now and never raised afterwards: review by default, autopilot only when the user asks for it in so many words. The secret comes back once and is stored only as a hash: show it to the user and say it cannot be read back. Prefer this to sharing anybody’s password, and never suggest a service key.ConnectorDestructiveOAuth
- Takes over the books a user kept elsewhere — a FEC, an XML audit file, an export of journal items, a journal report, a transaction journal, a trial balance, or the export of odoo or xero or quickbooks-online or pennylane or sage-50 or exact-online by name — whole or not at all. Each file is read by the reader of its source; every account of the old chart is matched to one of this company's chart and every old journal to a journal of the company. The codes give a candidate (the same code, the same digits without the padding zeros, or the longest beginning of three digits or more), and what the files say of the old account — its type, its name, the side of its balance — is held against what the chart says the candidate is, never a country: only the same code, not contradicted, is `exact`; anything else is `suggested` with its reason, or `none`. Each old journal is proposed from what its entries touch, never its name — the opening (entries on the first day of a year, balance accounts only), sales, purchases, bank, else the general journal — with its reason under journal_reasons. Call it with dry_run first: it returns the correspondence proposed, the suggestions under mapping.suggested, what is unanswered, and — when everything is answered — what the database would write, rehearsed and rolled back. Show the user every suggested line and its reason first; nothing is posted while one is unconfirmed. Settle each by writing its code under mapping.accounts, or, once the user has read and approved them all, pass accept_suggestions. Every entry is posted through post_entry(); a trial balance becomes the opening entry, on the first day of a year or the day inside it the books were taken over, and the open items beside it (open_items) posted documents that statement matching finds. Imported lines carry no tax and feed no VAT box. The same files twice are refused. The files travel as text, up to 256 KiB in all: a larger export is imported from the terminal with `ekwo import`, which reads it from the disk. Ask the user before the real call.ConnectorDestructiveOAuth
- Sets the prefix one journal prints in place of {CODE} in the numbers it draws — FAC instead of SAL, for instance — or puts its code back with null. The journal keeps its code and its counter: the series goes on at the next number. A prefix another journal of the company already prints is refused. The pattern around it (year, width) is the company's number_format in update_company_profile. Needs settings.write.ConnectorOAuth
- Creates the card of a contact, or changes it: each key the patch names takes its value, every other field keeps its own. The keys are status (where the relationship stands: one of new, contacted, in_discussion, client, partner, declined, dormant), priority (one of high, medium, low), owner (a handle — a member, a team, an agent — free text), job_title, linkedin_url, source (where the contact came from), tags (a list of words, replacing the list there), no_outbound (true: nobody may approach this contact — respect it everywhere) and custom (a JSON object of your own fields, replacing the one there). Any other key is refused, crm_unknown_field, with the list. Read crm_card first, and ask the user before changing a status, an owner or no_outbound they did not mention.ConnectorDestructiveOAuth
- Issues every period that has come on that day: for each schedule of a signed or active contract whose next_on is on or before it, one draft document per period — a sales invoice on a sale, a purchase invoice on a purchase — to the contract's party, contract_reference set to its number, and next_on moved on. Renewals and expiries come first. Twice for the same day issues once: the socle refuses a second document for one period. Drafts stay drafts unless the schedule says auto_post. Show the user what is due first (contracts_deadlines, kinds next_issue) and issue only once they agree; then show the drafts before anything is posted.ConnectorDestructiveOAuth
- Read inquiry-to-paid-work progression and evidenced bottlenecks. Use get_business_goals for target progress and get_business_budgets for spending controls; neither reconstructs an unavailable funnel. ### Choose a comparison Use explicit boundaries for a repeatable reporting question. For example, from=2026-10-08T00:00:00Z and until=2026-10-15T00:00:00Z cover October 8–14; the comparison covers October 1–7. An inclusive end date therefore needs the following midnight. Changing either boundary changes both interval length and its immediately preceding equal-length baseline. ### Interpret the evidence Reports are live, so corrections can alter earlier results. Embedded goal progress is the current observation, not a historical snapshot. Inquiry creation, scheduled service and payment use different dates and populations; these are not one conversion cohort. Missing progression is not rejection, and reach counts are not people. Original gross can include later refunds; it is neither retained cash nor profit. Payment can precede fulfillment. Keep unavailable-source reasons rather than inventing zeros or reconstructing them from another tool. Requires accounting:read, operations:read and a supported tenant source adapter. Optional provider reach uses existing reports under current read rights and consent.ConnectorOAuth
- Read budget definitions, spending limits and recorded consumption. Use get_business_change to find changes across resources or recover approval requests; this tool reads the selected budget’s evidence. ### Pick the question - How much may be spent now? Call without arguments. Advertising, roles and questions report availability separately. - Which stored frame should change? List view=frames, then take that row’s budgetId into an exact read. - Which role share should change? Read its budgetId+allocationId together. - What changed in a known budget? Use view=history with its budgetId. To trace one share, match kind/allocationId within that parent’s history. ### Finish the read Follow hasMore even if a history page has no matching share: unrelated events still consume limit. Frame pages seek by ID, not date; history follows newest-recorded append order. Keep the returned continuation with its original selection. Consumption is not available cash; missing historical revisions stay unknown. Missing frames yield budgets=[]; unavailable role data stays null; storage failures are errors. Requires accounting:read and operations:read. Read current state before update_business_budget/archive_business_budget. New frames use create_business_budget; new shares use create_business_role_budget.ConnectorOAuth
- Replace an active goal’s definition on explicit request. Use create_business_goal to create a separate goal and archive_business_goal to retire one. Archived goals cannot be edited or restored. ### Build the replacement Read get_business_goals(goalId), then construct a complete flat draft from that definition. For “change only the target,” keep its metric, dates, cadence, comparator, title and segment choices while changing targetValue. Omitted optional fields take defaults, a derived title or null segments; they do not retain stored values. Changing metric also changes the target’s meaning: 500 is 5% for booking_rate but EUR 5 for paid_revenue. Decide the new metric and target together rather than carrying a number across units blindly. ### Apply or hand off If either old or new metric is paid_revenue, the result is owner_approval_required/activates=false with a human card. Models never call confirm_business_change. Otherwise active contains the stored definition/revision, not measured progress. rejected changes nothing—read its reason. No spending or provider action occurs. ### Recover requestKey spans this actor/workspace’s goal create/update/archive intents. Exact replay retains the original expectedRevision after success and returns the old receipt. Reread the goal after replay or uncertainty before another change. Requires operator:prepare, accounting:read, operations:read and current authority, rechecked at the write.ConnectorDestructiveOAuth