Every change Wellknown observed on this MCP server, newest first, with what it was before and what it became. Tool-surface changes carry the definition diff. Nothing here is edited after the fact.
Added "migrate_cap_contract"; changed the definition of "call_cap", "publish_cap", "submit_cap" and 1 more (21 tools before, 22 now)
⟨4 unchanged words⟩ Accept header.","type":"string"},"accepted_contract_digest":{"description":"For a changed deliverable contract, pass the current get_cap contract_state.contract_digest only after confirming its deliverables, price and buyer spending authority. Do not silently reuse old permission.","type":"string"},"body":{"description":"Request body. An object ⟨208 unchanged words⟩
⟨358 unchanged words⟩ {"description":{"$ref":"#/$defs/text"},"description_zh":{"$ref":"#/$defs/text"},"example_input":{},"example_output":{},"execution" ⟨12 unchanged words⟩ ,"limitations":{"$ref":"#/$defs/text"},"limitations_zh":{"$ref":"#/$defs/text"},"method":{"enum":["GET","POST" ⟨28 unchanged words⟩ ,"title":{"$ref":"#/$defs/text"},"title_zh":{"$ref":"#/$defs/text"},"tool":{"maxLength":100,"minLength":1,"type":"string"},"when_to_use":{"$ref":"#/$defs/text"},"when_to_use_zh":{"$ref":"#/$defs/text"}},"type" ⟨1192 unchanged words⟩
⟨23 unchanged words⟩ book pass, with complete billed-operation docs, thispublishesliststhea new Capimmediatelyimmediately.andExistingagentsCapcanupdatescallretainittheir—effective version andbenoticechargedperiod;—
{"properties":{"price_version":{"description":"Explicit candidate version; isolated checks do not activate it or overwrite current publication evidence.","type":"integer"},"qumge_key":{"description":"Optional: your Qumge ⟨31 unchanged words⟩
Controlled same-price contract replacement for an owned live Cap. Prepare an explicit old-to-new mapping bound to the current and pending candidate versions/digest, test that candidate, then activate only its verified snapshot. Does not recharge, purchase, or perform real delivery. Changed deliverables require buyer confirmation for new orders; old orders keep their snapshots.
Changed the definition of "publish_cap" and "search_caps"
⟨115 unchanged words⟩ do not repeat name or override file fields. If the Cap is already published, publishing applies the file's changes directly — descriptions, operations and price cuts now, price rises after the notice period — and says so when the file matches what is live. Without manifest_url, give name and either connection_config, ⟨266 unchanged words⟩
⟨32 unchanged words⟩ "minLength":1,"type":"string"},"name_zh":{"maxLength":100,"minLength":1,"type":"string"},"operations":{"items":{"$ref":"#/$defs/operation" ⟨41 unchanged words⟩ 59}$","type":"string"},"summary":{"maxLength":500,"minLength":1,"type":"string"},"summary_zh":{"maxLength":500,"minLength":1," ⟨1513 unchanged words⟩
Added "delist_cap" and "relist_cap" (19 tools before, 21 now)
Take one of the developer's own Caps down. It stops working the moment this returns: calls get a 404 (cap_delisted) and it disappears from the store. Nothing is deleted — price versions, reviews and earnings stay, and the public page stays up marked as delisted so existing links don't break. Confirm with the user before calling: anyone using it loses access immediately. relist_cap puts it back with no new review. Needs the developer's Qumge key.
Put one of the developer's delisted Caps back online. There is no review: if the connection hasn't changed since it was delisted it goes live immediately. If the service address did change, it is retested first and the call fails with the test result until the new address passes. Needs the developer's Qumge key.
Changed the definition of "get_cap", "publish_cap" and "search_caps"
{"properties":{"icon_url":{"type":["string","null"]},"monthly_limit_micro_usd":{"type":["integer","null" ⟨123 unchanged words⟩
⟨9 unchanged words⟩ behalf (requires the developer's Qumge key). Start with the complete buyer outcome, then inspect existing MCP, API and business functions. Reuse a single entry point only when it delivers the full result; otherwise compose partial steps on the provider server and mix MCP, API and internal functions when useful. The buyer agent must not orchestrate provider internals. If both interfaces exist, choose the least-change reliable path; the presence of MCP is not a reason to ignore API. Prefer manifest v2: pass manifest_url for the project's ⟨229 unchanged words⟩
Certificate changed, valid to 2027-01-20
Added "get_cap_job"; changed the definition of "call_cap", "get_cap", "publish_cap" and 2 more (18 tools before, 19 now)
⟨61 unchanged words⟩ against it before anything is charged or forwarded. For managed results, pass a stable idempotency_key when retrying; asynchronous calls return a platform job_id and get_cap_job reads cached progress and the final receipt for free. Needs the user's qumge key in the Authorization ⟨34 unchanged words⟩
⟨40 unchanged words⟩ specific type.","type":"string"},"idempotency_key":{"description":"Stable key for retries of the same operation and input. Replays the original managed order; changed input is rejected.","maxLength":128,"minLength":1,"type":"string"},"input":{"description":"Arguments for the operation. ⟨145 unchanged words⟩
Changed the definition of "call_cap", "cap_status", "get_balance" and 11 more
Call acapabilityCap on the user's behalf and return its response. ⟨63 unchanged words⟩ in the Authorization header. A 5xx from thecapCap is free; a 402 means the user's balance or thiscap'sCap's monthly limit stopped it. (Older clients may ⟨10 unchanged words⟩
⟨181 unchanged words⟩ string"},"slug":{"description":"Thecap'sCap's slug, from search_caps.","type":"string" ⟨4 unchanged words⟩
Changed the definition of "publish_cap"
⟨349 unchanged words⟩ tool you price with `mcp_tools` becomes one operation.BillingAlookstools/call is charged at theHTTPpricestatusyouonly:seteveryonlytools/callwhenthatit comes back 2xxis charged atand
Changed the definition of "call_cap", "cap_status", "get_cap" and 10 more
⟨23 unchanged words⟩ the user's qumge balance and forwards the call,soat the same priceisasidenticalcallingtoitcallingovertheHTTPcapthroughdirectly.Qumge. Operations and prices come from get_cap. Prefer `operation`
Changed the definition of "get_earnings", "publish_cap" and "verify_domain"
⟨11 unchanged words⟩ ,"date":{"type":"string"},"frozen_host":{"type":["string","null"]},"type":{"type":"string"}},"required":[ ⟨3 unchanged words⟩ ,"type":"object"},"type":"array"},"frozen_micro_usd":{"type":"integer"},"next_payable_on":{"type":["string" ⟨21 unchanged words⟩
⟨257 unchanged words⟩ server instead of an HTTP API. Must behttps and onhttps.
Changed the definition of "publish_cap"
Every billed operation must deliver one complete result for one clear input (e.g. product URL in → finished video out); helper steps such as job status are free, and a result that needs several calls is wrapped into one endpoint — never sell partial steps. Publish a capability (cap) to Qumge on ⟨128 unchanged words⟩
Added "verify_domain"; changed the definition of "publish_cap" (17 tools before, 18 now)
⟨265 unchanged words⟩ https and on a domain you have verified: call verify_domain(Profileurl:)→tolinksget the line, ship it with the next deploy, then verify_domain(url:, check: true). Qumge calls tools/list to discover the tools ⟨495 unchanged words⟩
Prove the developer owns the domain of their MCP server or API — publish_cap needs it for an MCP cap. Call with the service's https url: if the domain (or a parent domain) is already verified it says so; otherwise it returns a one-line file to serve at /.well-known/qumge-verify.txt on that host (or a DNS TXT record with the same line). Put the file into the project so it ships with the next deploy, then call again with check: true. Needs the developer's Qumge key.
Changed the definition of "become_developer"
⟨88 unchanged words⟩ type":"string"},"type":"array"},"username":{"description":"Required if the account has no username yet: 3–30 letters, digits, _ or -. It becomes the public page /u/<username>.","type":"string"}},"required":["display_name","country"],"type":"object"}
Changed the definition of "publish_cap"
{"properties":{"auth_mode":{"description":"How qumge calls the service. signature (default): we sign each request and the service verifies it and answers GET /qumge/ping — code to write. api_key: the service is an existing API; we call it with the developer's own key (upstream_token) and nothing in it changes. api_key routes must be exact paths (no * or {}) and billed per call (meter: platform).","enum":["signature","api_key"],"type":"string"},"balance_json_path":{"description":"Only for balance_delta: ⟨667 unchanged words⟩ {"description":"What users buy, e.g. credit.","type":"string"},"upstream_token":{"description":"The developer's own API key for their service. Required for auth_mode api_key (and for balance_delta). Stored encrypted; sent as Authorization: Bearer.","type":"string"}},"required": ⟨3 unchanged words⟩
Changed the definition of "become_developer", "publish_cap" and "test_cap"
⟨17 unchanged words⟩ no waiting: it takes effect immediately, andpublish_apppublish_cap works right after. Give a display name and ⟨26 unchanged words⟩
⟨16 unchanged words⟩ the Authorization header). Give it a name,and either the API's HTTPS base_url or, for an existing remote MCP server, its mcp_url; and — if you can read them off
Changed the definition of "get_cap" and "publish_cap"
⟨19 unchanged words⟩ "type":["integer","null"]},"meter":{"description":"\"platform\" means Qumge counts one unit per successful (2xx) call at the unit price — a failing call is free.","enum":["app","platform"]},"method":{"type":"string"},"name" ⟨47 unchanged words⟩
⟨428 unchanged words⟩ ,"micro"],"type":"string"},"meter":{"description":"Who counts the usage. \"app\" (default): your service reports after each call. \"platform\": Qumge counts one unit per successful (2xx) call at your declared price — use this when a call always costs the same, and you only have to write the signature check, no usage reporting.","enum":["app","platform"],"type":"string"},"method":{"type":"string"},"name" ⟨150 unchanged words⟩
Added "call_cap", "cap_status", "get_cap" and 8 more; removed "app_status", "call_app", "get_app" and 5 more; changed the definition of "become_developer", "get_balance", "get_skill" and 3 more (14 tools before, 17 now)
before
—after
{"properties":{"country":{"type":"string"},"display_name":{"type":"string"},"status":{"type":"string"}},"required":["display_name","country"],"type":"object"}The user's Qumge balance, plus what eachappcapability has spent this month against its monthlycap.limit. Call this before a paid call when the ⟨9 unchanged words⟩
Added "become_developer", "get_balance" and "list_apps"; changed the definition of "call_app", "get_app", "get_skill" and 5 more (11 tools before, 14 now)
⟨97 unchanged words⟩ leading '?'.","type":"string"},"qumge_key":{"description":"Optional: your Qumge API key, for clients that cannot set an Authorization header. Takes precedence over the header. Never echoed back.","type":"string"},"slug":{"description":"The app's slug, ⟨9 unchanged words⟩
{"properties":{"qumge_key":{"description":"Optional: your Qumge API key, for clients that cannot set an Authorization header. Takes precedence over the header. Never echoed back.","type":"string"},"slug":{"description":"The app's slug, ⟨11 unchanged words⟩
Added "app_status", "call_app", "get_app" and 4 more (4 tools before, 11 now)
Check one of the developer's own apps: its status (draft / review / live / suspended) and how far the §9 review checklist has got. Needs the developer's Qumge key.
Call an app on the user's behalf and return its response. Use this when you cannot make the HTTP call yourself: qumge charges the user's qumge balance and forwards the call, so the price is identical to calling the app directly. Routes and prices come from get_app. Needs the user's qumge key in the Authorization header. A 5xx from the app is free; a 402 means the user's balance or this app's monthly cap stopped it.
Fetch one app's full price book and how to call it, by the slug returned from search_apps. Call this before using an app: it lists which routes are billable, the per-call maximum, when the call settles, and the error codes the caller may see. If the request carries the user's Qumge key, it also reports that user's monthly cap for this app.
Publish an app to Qumge on the developer's behalf (needs the developer's Qumge key in the Authorization header). Give it a name, the app's HTTPS base_url, and — if you can read them off the app — its price book (events with a unit price) and routes (with a per-call ceiling). It returns a DRAFT app plus the signing secret and usage key (shown once). Nothing goes live here: the developer submits for review after that.
Removed "get_bundle" and "list_bundles"; changed the definition of "get_skill" (6 tools before, 4 now)
⟨20 unchanged words⟩ (or the equivalent for the user's agent).andIfittheisreplyinstalledsays—thenoskillothershipsstepmoreisfiles
Certificate recorded, valid to 2026-11-22
Authorization not required
First tool surface recorded: 6 tools (server version 1.0.0)
Showing the latest 23 events. The API returns up to 500 and filters by kind: ?kind=tool_surface_changed
⟨3 unchanged words⟩ How many to return. Default 5, max 10. Use offset to page through a larger catalog.","maximum":10,"minimum":1,"type ⟨26 unchanged words⟩ result.","minimum":0,"type":"number"},"offset":{"description":"Skip this many ranked results. The response reports total and offset; keep passing offset until returned is 0.","minimum":0,"type":"integer"},"query":{"description":"What the ⟨18 unchanged words⟩
⟨4 unchanged words⟩ ,"notice":{"type":"string"},"offset":{"type":"integer"},"over_budget_count":{"type":"integer"},"partial_results" ⟨127 unchanged words⟩ "partial_only","needs_clarification","unsupported","browse"]},"total":{"type":"integer"},"uncertain_results":{"items":{"properties": ⟨11 unchanged words⟩
before
{"$defs":{"capability":{"additionalProperties":false,"properties":{"connection":{"pattern":"^[A-Za-z0-9_.-]{1,60}$","type":"string"},"keywords":{"items":{"maxLength":40,"minLength":1,"type":"string"},"maxItems":20,"type":"array"},"name":{"maxLength":100,"minLength":1,"type":"string"},"operations":{"items":{"$ref":"#/$defs/operation"},"maxItems":50,"minItems":1,"type":"array"},"price_hints":{"items":{"additionalProperties":false,"properties":{"label":{"maxLength":60,"minLength":1,"type":"string"},"typical_units":{"minimum":1,"type":"integer"}},"required":["label","typical_units"],"type":"object"},"maxItems":4,"type":"array"},"refund_policy_url":{"$ref":"#/$defs/link"},"slug":{"pattern":"^[a-z0-9][a-z0-9-]{0,59}$","type":"string"},"summary":{"maxLength":500,"minLength":1,"type":"string"},"support_url":{"$ref":"#/$defs/link"},"unit_name":{"pattern":"^[a-z][a-z0-9_ -]{0,29}$","type":"string"}},"required":["name","summary","connection","operations"],"type":"object"},"endpoint":{"additionalProperties":false,"allOf":[{"if":{"properties":{"type":{"const":"api"}}},"then":{"not":{"required":["mcp_url"]},"required":["base_url"]}},{"if":{"properties":{"type":{"const":"mcp"}}},"then":{"not":{"required":["base_url"]},"required":["mcp_url"]}}],"properties":{"auth":{"enum":["api_key","signed"]},"base_url":{"$ref":"#/$defs/https_url"},"mcp_url":{"$ref":"#/$defs/https_url"},"type":{"enum":["api","mcp"]}},"required":["type","auth"],"type":"object"},"execution":{"additionalProperties":false,"allOf":[{"if":{"properties":{"protocol":{"const":"qumge"}},"required":["protocol"]},"then":{"not":{"required":["deadline_field"]}}}],"properties":{"buyer_key_field":{"$ref":"#/$defs/pointer","minLength":1},"cancel":{"$ref":"#/$defs/state_operation"},"completion_timeout_seconds":{"maximum":86400,"minimum":1,"type":"integer"},"deadline_field":{"$ref":"#/$defs/pointer","minLength":1},"delivery":{"additionalProperties":false,"dependentRequired":{"refresh":["retention_seconds","url_fields"]},"properties":{"refresh":{"$ref":"#/$defs/state_operation"},"retention_seconds":{"maximum":31536000,"minimum":1,"type":"integer"},"url_fields":{"items":{"$ref":"#/$defs/pointer","minLength":1},"maxItems":20,"minItems":1,"type":"array","uniqueItems":true}},"type":"object"},"idempotency":{"additionalProperties":false,"properties":{"lookup":{"$ref":"#/$defs/state_operation"},"mode":{"enum":["none","native","lookup"]},"request_id_field":{"$ref":"#/$defs/pointer","minLength":1},"request_id_header":{"maxLength":100,"minLength":1,"pattern":"^[A-Za-z0-9-]+$","type":"string"}},"required":["mode"],"type":"object"},"identity":{"enum":["order","buyer"]},"mapping":{"additionalProperties":false,"properties":{"error":{"$ref":"#/$defs/pointer"},"job_id":{"$ref":"#/$defs/pointer"},"result":{"$ref":"#/$defs/pointer"},"states":{"additionalProperties":{"enum":["queued","running","succeeded","failed"]},"maxProperties":50,"propertyNames":{"maxLength":100,"minLength":1},"type":"object"},"status":{"$ref":"#/$defs/pointer"}},"type":"object"},"mode":{"enum":["sync","async"]},"protocol":{"enum":["native","qumge"]},"status":{"$ref":"#/$defs/state_operation"}},"type":"object"},"https_url":{"maxLength":2000,"pattern":"^https://[A-Za-z0-9.-]+(:[0-9]{1,5})?(/[^\\s?#]*)?$","type":"string"},"link":{"maxLength":2000,"pattern":"^(https://|mailto:)\\S+$","type":"string"},"operation":{"additionalProperties":false,"properties":{"description":{"$ref":"#/$defs/text"},"example_input":{},"execution":{"$ref":"#/$defs/execution"},"free_calls":{"maximum":100,"minimum":0,"type":"integer"},"input_schema":{"type":"object"},"limitations":{"$ref":"#/$defs/text"},"method":{"enum":["GET","POST","PUT","PATCH","DELETE"]},"name":{"pattern":"^[A-Za-z0-9_.-]{1,60}$","type":"string"},"output_schema":{"type":"object"},"path":{"pattern":"^/[^*{}\\s?#]{0,499}$","type":"string"},"price_usd":{"$ref":"#/$defs/usd"},"title":{"$ref":"#/$defs/text"},"tool":{"maxLength":100,"minLength":1,"type":"string"},"when_to_use":{"$ref":"#/$defs/text"}},"type":"object"},"pointer":{"maxLength":500,"pattern":"^(?:|/(?:[^~\\s]|~[01])*)$","type":"string"},"state_operation":{"oneOf":[{"additionalProperties":false,"properties":{"body":{"$ref":"#/$defs/template_object"},"method":{"enum":["GET","POST"]},"path":{"maxLength":500,"pattern":"^/(?:[^*{}\\s?#]|\\{(?:job_id|request_id)\\})*$","type":"string"},"query":{"$ref":"#/$defs/template_object"}},"required":["method","path"],"type":"object"},{"additionalProperties":false,"properties":{"arguments":{"$ref":"#/$defs/template_object"},"tool":{"maxLength":100,"minLength":1,"type":"string"}},"required":["tool"],"type":"object"}]},"template_object":{"additionalProperties":{"$ref":"#/$defs/template_value"},"maxProperties":50,"type":"object"},"template_value":{"anyOf":[{"maxLength":500,"pattern":"^(?:[^{}]|\\{(?:job_id|request_id)\\})*$","type":"string"},{"type":["number","boolean","null"]}]},"text":{"maxLength":2000,"minLength":1,"type":"string"},"usd":{"maximum":50,"minimum":0.001,"type":"number"}},"anyOf":[{"required":["manifest_url"]},{"required":["name"]}],"properties":{"auth_mode":{"description":"Manual service authentication; named connections declare it through connection_config.auth instead. signature (default) verifies signed requests; managed wrappers use trusted context, while legacy signed integrations also answer GET /qumge/ping. api_key sends upstream_token as the developer's Bearer key. Legacy api_key routes require exact paths and meter: platform; managed routes declare execution.","enum":["signature","api_key"],"type":"string"},"balance_json_path":{"description":"Only for balance_delta: where in that response.","type":"string"},"balance_path":{"description":"Only for balance_delta: where we read the balance.","type":"string"},"base_url":{"description":"Where the API lives. Must be https. For manual publication without manifest_url, connection_config, connection_id or mcp_url. Any path in it (https://host/v2) is part of what your server receives and is covered by the signature.","type":"string"},"connection_config":{"additionalProperties":false,"description":"Reusable private service connection. Repeating the same developer/name reuses credentials when endpoint and authentication agree.","properties":{"auth":{"enum":["signed","api_key"]},"base_url":{"type":"string"},"mcp_url":{"type":"string"},"name":{"type":"string"},"type":{"enum":["api","mcp"]}},"required":["name","type","auth"],"type":"object"},"connection_id":{"description":"Existing connection_id returned by publish_cap, belonging to this developer. Use instead of connection_config.","type":"string"},"events":{"description":"Manual price book. unit_price_usd is USD, e.g. 0.10. A managed operation uses one fixed-price event; advanced usage-based events belong to legacy integrations.","items":{"properties":{"key":{"type":"string"},"label":{"type":"string"},"unit_price_usd":{"type":"number"}},"required":["key","unit_price_usd"],"type":"object"},"type":"array"},"keywords":{"description":"Other names for the same thing, any language, up to 20. Agents search with a request like \"scrape trending TikTok videos\" — the keywords are what makes that find this app.","items":{"type":"string"},"type":"array"},"manifest_url":{"description":"Optional: publish from the project's qumge.json instead of passing everything by hand. Give https://<domain>/.well-known/qumge.json (or the service address). Its prices are suggestions: confirm them with the developer before submit_cap. The file supplies name, connection and operations; do not repeat name. Prefer manifest v2 for managed complete results. With several Caps in the file, pass `slug` to pick one (one call per Cap). Spec: https://qumge.com/docs/caps/manifest","type":"string"},"mcp_tools":{"description":"Prices for the MCP tools you want listed. Include execution and result schemas for managed complete-result delivery. Tools you leave out are not published and are reported back to you.","items":{"properties":{"doc":{"description":"Optional input_schema/output_schema overriding tools/list for this result operation.","type":"object"},"execution":{"$ref":"#/$defs/execution"},"name":{"description":"Tool name, exactly as tools/list returns it.","type":"string"},"unit_price_usd":{"description":"Price per complete result, in USD.","type":"number"}},"required":["name","unit_price_usd"],"type":"object"},"type":"array"},"mcp_url":{"description":"Optional: publish an existing remote MCP server instead of an HTTP API. Must be https. The domain does not need to be verified to go live, but earnings stay frozen until verify_domain passes for it. Qumge calls tools/list to discover the tools, and every tool you price with `mcp_tools` becomes one operation. Managed execution charges only after a valid complete result, not queued acceptance. Legacy tools without a managed connection or execution use per-response pricing: successful non-error replies are charged; non-2xx, timeouts, isError: true and JSON-RPC errors are free.","type":"string"},"metering":{"description":"Legacy usage-based mode only: reported (provider reports usage) or balance_delta (Qumge reads its balance). Managed execution needs neither usage reporting nor a usage key.","enum":["reported","balance_delta"],"type":"string"},"name":{"description":"Store name. Required only without manifest_url; manifest publication reads it from the file and ignores this duplicate field.","type":"string"},"qumge_key":{"description":"Optional: your Qumge API key, for clients that cannot set an Authorization header. Takes precedence over the header. Never echoed back.","type":"string"},"refund_policy_url":{"description":"Their refund policy, if they have one.","type":"string"},"routes":{"description":"Manual HTTP operations. Managed routes include execution and input/output schemas; the referenced event supplies the fixed price. Legacy routes use hold_usd as a per-call ceiling.","items":{"properties":{"billable":{"type":"boolean"},"doc":{"description":"What this operation does and what it takes, for agents. Optional, but without it an agent can only guess the input shape (call_cap validates `input` against doc.input_schema).","properties":{"description":{"type":"string"},"example_input":{"type":"object"},"input_schema":{"description":"JSON Schema 2020-12.","type":"object"},"limitations":{"type":"string"},"output_schema":{"description":"JSON Schema 2020-12.","type":"object"},"title":{"type":"string"},"when_to_use":{"type":"string"}},"type":"object"},"event":{"description":"Which price-book event this route bills. Defaults to the first event.","type":"string"},"execution":{"$ref":"#/$defs/execution","description":"Managed fixed result: sync/async invocation, internal status/recovery mapping and order (default) or buyer identity."},"hold_usd":{"type":"number"},"lane":{"description":"standard (default: one ledger row per call) or micro — for routes priced below $0.001. A micro route must settle on_response, its per-call ceiling must be at most $0.01, and calls settle in per-minute buckets instead of one row each.","enum":["standard","micro"],"type":"string"},"meter":{"description":"Managed execution requires platform: Qumge settles one fixed-price unit only on complete delivery, with no usage report. For legacy routes without a managed connection or execution, app (default) requires provider usage reports; platform charges one unit per successful response.","enum":["app","platform"],"type":"string"},"method":{"type":"string"},"name":{"type":"string"},"pattern":{"type":"string"},"rate_limit_per_min":{"description":"Micro lanes only: calls per minute per key (default 600).","maximum":3000,"minimum":60,"type":"integer"},"settle":{"enum":["on_response","on_final","on_result"],"type":"string"}},"required":["pattern"],"type":"object"},"type":"array"},"skill_slug":{"description":"Optional. Attach an existing skill from the catalog to this app (its documentation then shows on the app page). Ignored if the slug is unknown.","type":"string"},"slug":{"description":"Optional URL slug. Derived from the name when omitted. With manifest_url: picks which Cap in the file to publish.","type":"string"},"social_links":{"description":"Up to 6 public URLs for the developer (X, GitHub, LinkedIn, their website). Shown on every app page. The kind is guessed from the domain.","items":{"type":"string"},"type":"array"},"summary":{"description":"One line describing what it does.","type":"string"},"support_url":{"description":"Where users ask for help. Shown on the app page.","type":"string"},"unit_name":{"description":"What users buy, e.g. credit.","type":"string"},"upstream_token":{"description":"The developer's own service key. Required for a new api_key or authenticated MCP connection, and legacy balance_delta. With manifest_url, provide it when the selected connection needs api_key authentication and has no stored key. Reusable connections retain their credentials. Stored encrypted; sent as Authorization: Bearer.","type":"string"}},"type":"object"}after
{"$defs":{"capability":{"additionalProperties":false,"properties":{"connection":{"pattern":"^[A-Za-z0-9_.-]{1,60}$","type":"string"},"icon_url":{"$ref":"#/$defs/https_url"},"keywords":{"items":{"maxLength":40,"minLength":1,"type":"string"},"maxItems":20,"type":"array"},"name":{"maxLength":100,"minLength":1,"type":"string"},"operations":{"items":{"$ref":"#/$defs/operation"},"maxItems":50,"minItems":1,"type":"array"},"price_hints":{"items":{"additionalProperties":false,"properties":{"label":{"maxLength":60,"minLength":1,"type":"string"},"typical_units":{"minimum":1,"type":"integer"}},"required":["label","typical_units"],"type":"object"},"maxItems":4,"type":"array"},"refund_policy_url":{"$ref":"#/$defs/link"},"slug":{"pattern":"^[a-z0-9][a-z0-9-]{0,59}$","type":"string"},"summary":{"maxLength":500,"minLength":1,"type":"string"},"support_url":{"$ref":"#/$defs/link"},"unit_name":{"pattern":"^[a-z][a-z0-9_ -]{0,29}$","type":"string"}},"required":["name","summary","connection","operations"],"type":"object"},"endpoint":{"additionalProperties":false,"allOf":[{"if":{"properties":{"type":{"const":"api"}}},"then":{"not":{"required":["mcp_url"]},"required":["base_url"]}},{"if":{"properties":{"type":{"const":"mcp"}}},"then":{"not":{"required":["base_url"]},"required":["mcp_url"]}}],"properties":{"auth":{"enum":["api_key","signed"]},"base_url":{"$ref":"#/$defs/https_url"},"mcp_url":{"$ref":"#/$defs/https_url"},"type":{"enum":["api","mcp"]}},"required":["type","auth"],"type":"object"},"execution":{"additionalProperties":false,"allOf":[{"if":{"properties":{"protocol":{"const":"qumge"}},"required":["protocol"]},"then":{"not":{"required":["deadline_field"]}}}],"properties":{"buyer_key_field":{"$ref":"#/$defs/pointer","minLength":1},"cancel":{"$ref":"#/$defs/state_operation"},"completion_timeout_seconds":{"maximum":86400,"minimum":1,"type":"integer"},"deadline_field":{"$ref":"#/$defs/pointer","minLength":1},"delivery":{"additionalProperties":false,"dependentRequired":{"refresh":["retention_seconds","url_fields"]},"properties":{"refresh":{"$ref":"#/$defs/state_operation"},"retention_seconds":{"maximum":31536000,"minimum":1,"type":"integer"},"url_fields":{"items":{"$ref":"#/$defs/pointer","minLength":1},"maxItems":20,"minItems":1,"type":"array","uniqueItems":true}},"type":"object"},"idempotency":{"additionalProperties":false,"properties":{"lookup":{"$ref":"#/$defs/state_operation"},"mode":{"enum":["none","native","lookup"]},"request_id_field":{"$ref":"#/$defs/pointer","minLength":1},"request_id_header":{"maxLength":100,"minLength":1,"pattern":"^[A-Za-z0-9-]+$","type":"string"}},"required":["mode"],"type":"object"},"identity":{"enum":["order","buyer"]},"mapping":{"additionalProperties":false,"properties":{"error":{"$ref":"#/$defs/pointer"},"job_id":{"$ref":"#/$defs/pointer"},"result":{"$ref":"#/$defs/pointer"},"states":{"additionalProperties":{"enum":["queued","running","succeeded","failed"]},"maxProperties":50,"propertyNames":{"maxLength":100,"minLength":1},"type":"object"},"status":{"$ref":"#/$defs/pointer"}},"type":"object"},"mode":{"enum":["sync","async"]},"protocol":{"enum":["native","qumge"]},"status":{"$ref":"#/$defs/state_operation"}},"type":"object"},"https_url":{"maxLength":2000,"pattern":"^https://[A-Za-z0-9.-]+(:[0-9]{1,5})?(/[^\\s?#]*)?$","type":"string"},"link":{"maxLength":2000,"pattern":"^(https://|mailto:)\\S+$","type":"string"},"operation":{"additionalProperties":false,"properties":{"description":{"$ref":"#/$defs/text"},"example_input":{},"example_output":{},"execution":{"$ref":"#/$defs/execution"},"free_calls":{"maximum":100,"minimum":0,"type":"integer"},"input_schema":{"type":"object"},"limitations":{"$ref":"#/$defs/text"},"method":{"enum":["GET","POST","PUT","PATCH","DELETE"]},"name":{"pattern":"^[A-Za-z0-9_.-]{1,60}$","type":"string"},"output_schema":{"type":"object"},"path":{"pattern":"^/[^*{}\\s?#]{0,499}$","type":"string"},"price_usd":{"$ref":"#/$defs/usd"},"title":{"$ref":"#/$defs/text"},"tool":{"maxLength":100,"minLength":1,"type":"string"},"when_to_use":{"$ref":"#/$defs/text"}},"type":"object"},"pointer":{"maxLength":500,"pattern":"^(?:|/(?:[^~\\s]|~[01])*)$","type":"string"},"state_operation":{"oneOf":[{"additionalProperties":false,"properties":{"body":{"$ref":"#/$defs/template_object"},"method":{"enum":["GET","POST"]},"path":{"maxLength":500,"pattern":"^/(?:[^*{}\\s?#]|\\{(?:job_id|request_id)\\})*$","type":"string"},"query":{"$ref":"#/$defs/template_object"}},"required":["method","path"],"type":"object"},{"additionalProperties":false,"properties":{"arguments":{"$ref":"#/$defs/template_object"},"tool":{"maxLength":100,"minLength":1,"type":"string"}},"required":["tool"],"type":"object"}]},"template_object":{"additionalProperties":{"$ref":"#/$defs/template_value"},"maxProperties":50,"type":"object"},"template_value":{"anyOf":[{"maxLength":500,"pattern":"^(?:[^{}]|\\{(?:job_id|request_id)\\})*$","type":"string"},{"type":["number","boolean","null"]}]},"text":{"maxLength":2000,"minLength":1,"type":"string"},"usd":{"maximum":50,"minimum":0.001,"type":"number"}},"anyOf":[{"required":["manifest_url"]},{"required":["name"]}],"properties":{"auth_mode":{"description":"Manual service authentication; named connections declare it through connection_config.auth instead. signature (default) verifies signed requests; managed wrappers use trusted context, while legacy signed integrations also answer GET /qumge/ping. api_key sends upstream_token as the developer's Bearer key. Legacy api_key routes require exact paths and meter: platform; managed routes declare execution.","enum":["signature","api_key"],"type":"string"},"balance_json_path":{"description":"Only for balance_delta: where in that response.","type":"string"},"balance_path":{"description":"Only for balance_delta: where we read the balance.","type":"string"},"base_url":{"description":"Where the API lives. Must be https. For manual publication without manifest_url, connection_config, connection_id or mcp_url. Any path in it (https://host/v2) is part of what your server receives and is covered by the signature.","type":"string"},"connection_config":{"additionalProperties":false,"description":"Reusable private service connection. Repeating the same developer/name reuses credentials when endpoint and authentication agree.","properties":{"auth":{"enum":["signed","api_key"]},"base_url":{"type":"string"},"mcp_url":{"type":"string"},"name":{"type":"string"},"type":{"enum":["api","mcp"]}},"required":["name","type","auth"],"type":"object"},"connection_id":{"description":"Existing connection_id returned by publish_cap, belonging to this developer. Use instead of connection_config.","type":"string"},"events":{"description":"Manual price book. unit_price_usd is USD, e.g. 0.10. A managed operation uses one fixed-price event; advanced usage-based events belong to legacy integrations.","items":{"properties":{"key":{"type":"string"},"label":{"type":"string"},"unit_price_usd":{"type":"number"}},"required":["key","unit_price_usd"],"type":"object"},"type":"array"},"icon_url":{"description":"Public HTTPS Cap icon, preferably a square 256px PNG or WebP. Required before a draft can go live. Reuse a suitable project asset or prepare one and deploy it with the project. With manifest_url, declare icon_url in the selected capability instead.","type":"string"},"keywords":{"description":"Other names for the same thing, any language, up to 20. Agents search with a request like \"scrape trending TikTok videos\" — the keywords are what makes that find this app.","items":{"type":"string"},"type":"array"},"manifest_url":{"description":"Optional: publish from the project's qumge.json instead of passing everything by hand. Give https://<domain>/.well-known/qumge.json (or the service address). Its prices are suggestions unless already approved: confirm initial pricing or changes before submit_cap; do not reconfirm approved prices. The file supplies name, connection and operations; do not repeat name. Prefer manifest v2 for managed complete results. With several Caps in the file, pass `slug` to pick one (one call per Cap). Spec: https://qumge.com/docs/caps/manifest","type":"string"},"mcp_tools":{"description":"Prices for the MCP tools you want listed. Include execution and result schemas for managed complete-result delivery. Tools you leave out are not published and are reported back to you.","items":{"properties":{"doc":{"description":"Optional input_schema/output_schema overriding tools/list for this result operation.","type":"object"},"execution":{"$ref":"#/$defs/execution"},"name":{"description":"Tool name, exactly as tools/list returns it.","type":"string"},"unit_price_usd":{"description":"Price per complete result, in USD.","type":"number"}},"required":["name","unit_price_usd"],"type":"object"},"type":"array"},"mcp_url":{"description":"Optional: publish an existing remote MCP server instead of an HTTP API. Must be https. The domain does not need to be verified to go live, but earnings stay frozen until verify_domain passes for it. Qumge calls tools/list to discover the tools, and every tool you price with `mcp_tools` becomes one operation. Managed execution charges only after a valid complete result, not queued acceptance. Legacy tools without a managed connection or execution use per-response pricing: successful non-error replies are charged; non-2xx, timeouts, isError: true and JSON-RPC errors are free.","type":"string"},"metering":{"description":"Legacy usage-based mode only: reported (provider reports usage) or balance_delta (Qumge reads its balance). Managed execution needs neither usage reporting nor a usage key.","enum":["reported","balance_delta"],"type":"string"},"name":{"description":"Store name. Required only without manifest_url; manifest publication reads it from the file and ignores this duplicate field.","type":"string"},"qumge_key":{"description":"Optional: your Qumge API key, for clients that cannot set an Authorization header. Takes precedence over the header. Never echoed back.","type":"string"},"refund_policy_url":{"description":"Their refund policy, if they have one.","type":"string"},"routes":{"description":"Manual HTTP operations. Managed routes include execution and input/output schemas; the referenced event supplies the fixed price. Legacy routes use hold_usd as a per-call ceiling.","items":{"properties":{"billable":{"type":"boolean"},"doc":{"description":"What this operation does and what it takes, for agents. Optional, but without it an agent can only guess the input shape (call_cap validates `input` against doc.input_schema).","properties":{"description":{"type":"string"},"example_input":{"type":"object"},"input_schema":{"description":"JSON Schema 2020-12.","type":"object"},"limitations":{"type":"string"},"output_schema":{"description":"JSON Schema 2020-12.","type":"object"},"title":{"type":"string"},"when_to_use":{"type":"string"}},"type":"object"},"event":{"description":"Which price-book event this route bills. Defaults to the first event.","type":"string"},"execution":{"$ref":"#/$defs/execution","description":"Managed fixed result: sync/async invocation, internal status/recovery mapping and order (default) or buyer identity."},"hold_usd":{"type":"number"},"lane":{"description":"standard (default: one ledger row per call) or micro — for routes priced below $0.001. A micro route must settle on_response, its per-call ceiling must be at most $0.01, and calls settle in per-minute buckets instead of one row each.","enum":["standard","micro"],"type":"string"},"meter":{"description":"Managed execution requires platform: Qumge settles one fixed-price unit only on complete delivery, with no usage report. For legacy routes without a managed connection or execution, app (default) requires provider usage reports; platform charges one unit per successful response.","enum":["app","platform"],"type":"string"},"method":{"type":"string"},"name":{"type":"string"},"pattern":{"type":"string"},"rate_limit_per_min":{"description":"Micro lanes only: calls per minute per key (default 600).","maximum":3000,"minimum":60,"type":"integer"},"settle":{"enum":["on_response","on_final","on_result"],"type":"string"}},"required":["pattern"],"type":"object"},"type":"array"},"skill_slug":{"description":"Optional. Attach an existing skill from the catalog to this app (its documentation then shows on the app page). Ignored if the slug is unknown.","type":"string"},"slug":{"description":"Optional URL slug. Derived from the name when omitted. With manifest_url: picks which Cap in the file to publish.","type":"string"},"social_links":{"description":"Up to 6 public URLs for the developer (X, GitHub, LinkedIn, their website). Shown on every app page. The kind is guessed from the domain.","items":{"type":"string"},"type":"array"},"summary":{"description":"One line describing what it does.","type":"string"},"support_url":{"description":"Where users ask for help. Shown on the app page.","type":"string"},"unit_name":{"description":"What users buy, e.g. credit.","type":"string"},"upstream_token":{"description":"The developer's own service key. Required for a new api_key or authenticated MCP connection, and legacy balance_delta. With manifest_url, provide it when the selected connection needs api_key authentication and has no stored key. Reusable connections retain their credentials. Stored encrypted; sent as Authorization: Bearer.","type":"string"}},"type":"object"}⟨76 unchanged words⟩ , and the slug to pass to get_cap. Results label declared direct or uncertain matches; partial_results are separate and never a complete-result replacement. Budget applies to the matched operation reservation ceiling. Publication checks are not proof of real delivery. (Older clients may still call this tool as ⟨5 unchanged words⟩
⟨16 unchanged words⟩ :"integer"},"max_price_usd":{"description":"Optional ceiling:MaximumdropreservationCapsforwhosetheper-callmatchedpriceoperationisinaboveUSthisdollars,innotUSitsdollars.unit price. Partial steps are returned separately and never replace a complete result.","minimum":0,"type":"number"},"query":{" ⟨21 unchanged words⟩
{"properties":{"limit":{"type":"integer"},"notice":{"type":"string"},"over_budget_count":{"type":"integer"},"partial_results":{"items":{"properties":{"match_level":{"const":"partial"},"price_line":{"type":"string"},"slug":{"type":"string"}},"required":["slug","match_level","price_line"],"type":"object"},"type":"array"},"query":{"type":["string","null"]},"results":{"items":{"properties":{"deliverables":{"items":{"type":"string"},"type":"array"},"free_calls":{"additionalProperties":{"type":"integer" ⟨10 unchanged words⟩ gets free.","type":"object"},"icon_url":{"type":["string","null"]},"json_url":{"type":"string"},"markdown_url":{"type":"string"},"match_level":{"enum":["direct","partial","uncertain"]},"match_reason":{"type":"string"},"matching_operations":{"items":{"type":"object"},"type":"array"},"max_per_call_micro_usd":{"type":"integer"},"measured_calls_7d" ⟨9 unchanged words⟩ ,"price_line":{"type":"string"},"required_inputs":{"items":{"type":"string"},"type":"array"},"slug":{"type":"string"},"statistics":{"type":"object"},"success_rate":{"type":["integer","null"]},"summary":{"type":"string"},"verification":{"type":"object"}},"required":["slug","name","price_line ⟨3 unchanged words⟩ "array"},"returned":{"type":"integer"},"status":{"enum":["direct_matches","no_complete_result_within_budget","partial_only","needs_clarification","unsupported","browse"]},"uncertain_results":{"items":{"properties":{"match_level":{"const":"uncertain"}},"type":"object"},"type":"array"}},"required":["results"],"type":"object"}
{"anyOf":[{"properties":{"binary":{"type":"boolean" ⟨75 unchanged words⟩ "path","body"],"type":"object"},{"properties":{"call_id":{"type":"string"},"cancellation":{"description":"Optional timeout notification status; acknowledgement does not prove that provider work stopped.","type":"object"},"deadline_at":{"type":["string","null"]},"delivery":{"description":"The provider's declared retention commitment and optional free result URL renewal support.","type":"object"},"error":{"type":["object","null"]},"error_omitted":{"description":"The provider error is omitted from this tool response; read job_url for the full cached document.","type":"boolean"},"job_id":{"type":"string"},"job_url":{"description":"Free authenticated GET endpoint for the full cached job document.","format":"uri","type":"string"},"next_action":{"properties":{"arguments":{"properties":{"job_id":{"type":"string"}},"required":["job_id"],"type":"object"},"tool":{"const":"get_cap_job"}},"required":["tool","arguments"],"type":"object"},"next_poll_after_seconds":{"type":"integer"},"receipt":{"properties":{"charged_micro_usd":{"type":["integer","null"]},"reserved_micro_usd":{"type":"integer"},"settled_at":{"type":["string","null"]},"status":{"enum":["reserved","settled"]}},"required":["status","reserved_micro_usd","charged_micro_usd"],"type":"object"},"result":{},"result_omitted":{"description":"The complete result is omitted from this tool response; read job_url for the full cached document.","type":"boolean"},"status":{"enum":["submitting","acceptance_unknown","queued","running","succeeded","failed","expired"]}},"required":["job_id","call_id","status","receipt"],"type":"object"}]}
⟨15 unchanged words⟩ "type":["object","null"]},"execution":{"type":["object","null"]},"free_calls":{"description":"First N calls per ⟨52 unchanged words⟩ "pattern":{"type":"string"},"settles":{"type":["string","null"]},"status_tool":{"type":["string","null"] ⟨37 unchanged words⟩
Create or update a DRAFT Cap on the developer's behalf (requires the developer's Qumge key). Prefer manifest v2: pass manifest_url for the project's public qumge.json, and slug to select a Cap when needed. The file supplies the name, connection, operations and suggested prices; do not repeat name or override file fields. Without manifest_url, give name and either connection_config, connection_id, base_url or mcp_url, plus the priced operations. Every billed operation must deliver one complete result ⟨30 unchanged words⟩ into one endpoint — never sell partial steps.DoManagednotexecutionpublishreservestoolsaorfixedendpointspricethatandactchargesononlytheaftercaller'svalidowncompleteaccountdelivery;orqueueddataacceptance(theirisnotes,notsettingsdelivery,balance): every buyer'sandcallfailedisorforwardedexpiredwithordersthecostsamenothing.developerReusetoken,existingsotaskstheyandwoulddurableallrequest_idactdeduplication;onprovidersoneneedaccountno—Qumge-specificsellbuyer,anorder,account-freeledgerinputor→usage-reportingresulttables.operationPreferinstead,execution.identity:ororderusewiththeself-containedsignedinputs.integrationUseandtrustedtellrequest_idbuyerstoapartisolatebytaskstheandQumge-Userprivateheader.results.PublishForabuyer-ownedCapstate,(shortexplicitlyforchoosecapability)identity:tobuyerQumgeandonauthorize thedeveloper's behalftrusted(needsbuyer_key;theadeveloper'ssharedQumgeservicekeyaccountinalonethedoesAuthorizationnotheader).isolateGivebuyers.itUseaconnection_confignameorandconnection_ideithertotheshareAPI'sprivateHTTPScredentialsbase_urlacrossor,Caps.forReadanhttps://qumge.com/en/docs/caps/managed.mdexistingforremotetheMCPcompleteserver,contract.itsLegacymcp_url;per-response and— if you can read themadvancedoffusage-basedthefieldsprojectremain—supporteditsforpriceexistingbookintegrations;(eventsthewithsigning/usageaguideunitappliesprice)toandthoseoperationsmodes,(routesnotwithmanagedaexecution.per-callAceiling,newandsigningasecret`doc`isdescribingreturnedinput/outputoncesowhenagentsapplicable.knowLegacywhatnon-managedtointegrationssend).mayItalsoreturnsreturn aDRAFT Cap plus theusagesigningkey;secretmanagedandexecutionusagedoeskeynot(shownuseonce).it. Nothing is charged while it is a draft. Confirm manifest prices with the developer. There is no human review: after test_cap ⟨28 unchanged words⟩
before
{"properties":{"auth_mode":{"description":"How qumge calls the service. signature (default): we sign each request and the service verifies it and answers GET /qumge/ping — code to write. api_key: the service is an existing API; we call it with the developer's own key (upstream_token) and nothing in it changes. api_key routes must be exact paths (no * or {}) and billed per call (meter: platform).","enum":["signature","api_key"],"type":"string"},"balance_json_path":{"description":"Only for balance_delta: where in that response.","type":"string"},"balance_path":{"description":"Only for balance_delta: where we read the balance.","type":"string"},"base_url":{"description":"Where the API lives. Must be https. Required unless you give mcp_url. Any path in it (https://host/v2) is part of what your server receives and is covered by the signature.","type":"string"},"events":{"description":"Price book events. unit_price_usd is in US dollars, e.g. 0.10.","items":{"properties":{"key":{"type":"string"},"label":{"type":"string"},"unit_price_usd":{"type":"number"}},"required":["key","unit_price_usd"],"type":"object"},"type":"array"},"keywords":{"description":"Other names for the same thing, any language, up to 20. Agents search with a request like \"scrape trending TikTok videos\" — the keywords are what makes that find this app.","items":{"type":"string"},"type":"array"},"manifest_url":{"description":"Optional: publish from the project's qumge.json instead of passing everything by hand. Give https://<domain>/.well-known/qumge.json (or the service address). Its prices are suggestions: confirm them with the developer before submit_cap. With several Caps in the file, pass `slug` to pick one (one call per Cap). Spec: https://qumge.com/docs/caps/manifest","type":"string"},"mcp_tools":{"description":"Prices for the MCP tools you want listed. Tools you leave out are not published and are reported back to you.","items":{"properties":{"name":{"description":"Tool name, exactly as tools/list returns it.","type":"string"},"unit_price_usd":{"description":"Price per successful call, in USD.","type":"number"}},"required":["name","unit_price_usd"],"type":"object"},"type":"array"},"mcp_url":{"description":"Optional: publish an existing remote MCP server instead of an HTTP API. Must be https. The domain does not need to be verified to go live, but earnings stay frozen until verify_domain passes for it. Qumge calls tools/list to discover the tools, and every tool you price with `mcp_tools` becomes one operation. A tools/call is charged at the price you set only when it comes back 2xx and the tool did not fail; non-2xx, timeouts, a tool result with isError: true and JSON-RPC errors are free.","type":"string"},"metering":{"description":"reported (the app tells us what to charge) or balance_delta (we read its balance).","enum":["reported","balance_delta"],"type":"string"},"name":{"description":"Human name shown in the store.","type":"string"},"qumge_key":{"description":"Optional: your Qumge API key, for clients that cannot set an Authorization header. Takes precedence over the header. Never echoed back.","type":"string"},"refund_policy_url":{"description":"Their refund policy, if they have one.","type":"string"},"routes":{"description":"HTTP routes. Billable routes need hold_usd (the most one call may cost).","items":{"properties":{"billable":{"type":"boolean"},"doc":{"description":"What this operation does and what it takes, for agents. Optional, but without it an agent can only guess the input shape (call_cap validates `input` against doc.input_schema).","properties":{"description":{"type":"string"},"example_input":{"type":"object"},"input_schema":{"description":"JSON Schema 2020-12.","type":"object"},"limitations":{"type":"string"},"output_schema":{"description":"JSON Schema 2020-12.","type":"object"},"title":{"type":"string"},"when_to_use":{"type":"string"}},"type":"object"},"event":{"description":"Which price-book event this route bills. Defaults to the first event.","type":"string"},"hold_usd":{"type":"number"},"lane":{"description":"standard (default: one ledger row per call) or micro — for routes priced below $0.001. A micro route must settle on_response, its per-call ceiling must be at most $0.01, and calls settle in per-minute buckets instead of one row each.","enum":["standard","micro"],"type":"string"},"meter":{"description":"Who counts the usage. \"app\" (default): your service reports after each call. \"platform\": Qumge counts one unit per successful (2xx) call at your declared price — use this when a call always costs the same, and you only have to write the signature check, no usage reporting.","enum":["app","platform"],"type":"string"},"method":{"type":"string"},"name":{"type":"string"},"pattern":{"type":"string"},"rate_limit_per_min":{"description":"Micro lanes only: calls per minute per key (default 600).","maximum":3000,"minimum":60,"type":"integer"},"settle":{"enum":["on_response","on_final"],"type":"string"}},"required":["pattern"],"type":"object"},"type":"array"},"skill_slug":{"description":"Optional. Attach an existing skill from the catalog to this app (its documentation then shows on the app page). Ignored if the slug is unknown.","type":"string"},"slug":{"description":"Optional URL slug. Derived from the name when omitted. With manifest_url: picks which Cap in the file to publish.","type":"string"},"social_links":{"description":"Up to 6 public URLs for the developer (X, GitHub, LinkedIn, their website). Shown on every app page. The kind is guessed from the domain.","items":{"type":"string"},"type":"array"},"summary":{"description":"One line describing what it does.","type":"string"},"support_url":{"description":"Where users ask for help. Shown on the app page.","type":"string"},"unit_name":{"description":"What users buy, e.g. credit.","type":"string"},"upstream_token":{"description":"The developer's own API key for their service. Required for auth_mode api_key (and for balance_delta, and with manifest_url when the file's endpoint auth is api_key). Stored encrypted; sent as Authorization: Bearer.","type":"string"}},"required":["name"],"type":"object"}{"properties":{"connection_id":{"type":["string","null"]},"name":{"type":"string"},"price_book_version" ⟨29 unchanged words⟩
⟨11 unchanged words⟩ launch and nobody approves it: when thethreeapplicablecode-checkedconnection/operationitemscheckspassand(signature,priceend-to-endbook pass,pricewithbook)complete billed-operation docs, this publishes the Cap immediately and agents ⟨7 unchanged words⟩ — from then on. Run test_cap first (itlegacyrecordschecklist keys remain signature+andend-to-end;end_to_end; the price book is recorded when it saves). Passing native connection checks or isolated fixtures does not verify real delivery. Qumge spot-checks docs and support afterwards and can ⟨17 unchanged words⟩
Runa Cap'stheconnectionapplicabletestpublicationandchecksend-to-endafterself-testpublish_cap,andbeforerecordsubmit_cap.bothManagedresultsqumgeonwrapperitsoperationspublishingusechecklist.authenticatedDoisolatedthisfixtureafterhookspublish_cap,andbeforevalidatesubmit_cap.theThecompleteconnectionfixturetestresult.sendsNativethreemanagedrequestsAPI/MCPtooperationsbase_urlcheck+HTTP/qumge/pingOPTIONS(correctlyorsigned,MCPwrongtools/listsecret,forandconnection/schemaaevidence10-minute-oldwithouttimestampinvoking—generation.onlyThetheverificationfirstarraymaydistinguishessucceed);connection,thefixtureend-to-endandtestreal_deliverycallsscopes; real delivery is not tested. Legacy integrations may call one free and one billableoperationroute,directlyoroneachthepublishedCapMCP(nothingtool,isdirectlycharged)withand,probeforinputs;aQumgeroutedoesthenotCapchargereportsforitselfthese probes,waitsbut2thesecondsdeveloperformayitsincurusageproviderreport.costs.AnSignedMCPwrapper/legacyCapAPIshasalsoeachtestlisted/qumge/pingtoolwithcalledvalid,onceforgedinstead.andItstalewarnssignatures;(withoutlegacyblocking)usage-reportingaboutroutesbilledmustoperationsreportthatprobehaveusage.noMissing`doc`.billed-operation docs block publishing. Needs the developer's Qumge key. (Older clients ⟨7 unchanged words⟩
⟨22 unchanged words⟩ "},"slug":{"type":"string"},"verification":{"items":{"properties":{"scope":{"enum":["connection","fixture","real_delivery"]},"status":{"enum":["passed","failed","not_tested"]},"summary":{"type":"string"}},"required":["scope","status","summary"],"type":"object"},"type":"array"}},"required":["slug","end_to_end_passed","verification"],"type":"object"}
Read your managed Cap job's cached progress, complete result and receipt for free. Use the platform job_id returned by call_cap. Ordinary reads do not invoke the provider. Set refresh_result: true to explicitly request free renewal of declared result URLs after success; the optional private provider command does not generate new work or change the receipt. Existing orders remain readable after Cap revocation.
⟨25 unchanged words⟩ string"},"slug":{"description":"Thecap'sCap's slug.","type":"string"}},"required ⟨3 unchanged words⟩
The user's Qumge balance, plus what eachcapabilityCap has spent this month against its monthly limit. ⟨45 unchanged words⟩
Fetch onecapability'sCap's operations, prices and how to call it, by the slug returned from search_caps. Call this before using acapCap: it lists each operation (by name), ⟨38 unchanged words⟩ also reports that user's monthly limit for thiscap.Cap. (Older clients may still call this tool ⟨6 unchanged words⟩
⟨25 unchanged words⟩ string"},"slug":{"description":"Thecap'sCap's slug, e.g. 'autowhisper'. Comes from search_caps."," ⟨6 unchanged words⟩
⟨17 unchanged words⟩ amount sitting in their wallet (income fromcapabilitiesCaps — the only part that can be withdrawn ⟨25 unchanged words⟩
List the developer's owncapabilitiesCaps with their status (draft / live / ⟨33 unchanged words⟩
⟨31 unchanged words⟩ 30 days. Useful before building or publishing acapabilityCap — it tells you what people already want. ⟨11 unchanged words⟩
⟨38 unchanged words⟩ into one endpoint — never sell partial steps. Do not publish tools or endpoints that act on the caller's own account or data (their notes, settings, balance): every buyer's call is forwarded with the same developer token, so they would all act on one account — sell an account-free input → result operation instead, or use the signed integration and tell buyers apart by the Qumge-User header. Publish acapabilityCap (capshort for capability) to Qumge on the developer's behalf (needs ⟨62 unchanged words⟩ what to send). It returns a DRAFTcapCap plus the signing secret and usage key ( ⟨15 unchanged words⟩ review: after test_cap passes, submit_cap takes thecapCap live immediately, and qumge spot-checks it afterwards ⟨16 unchanged words⟩
⟨223 unchanged words⟩ them with the developer before submit_cap. With severalcapabilitiesCaps in the file, pass `slug` to pick one (one call percapabilityCap). Spec: https://qumge.com/docs/caps/manifest","type":" ⟨493 unchanged words⟩ name when omitted. With manifest_url: picks whichcapabilityCap in the file to publish.","type": ⟨107 unchanged words⟩
Ask for a payout of the developer's payable balance (capabilityCap income only — topped-up money cannot be withdrawn ⟨36 unchanged words⟩
Search Qumge'scapabilitiesCaps — paid services an agent can call, billed per call from the user's Qumge balance. AcapabilityCap (capshort for capability) is one finished job: somebody's API or MCP server with a price ⟨61 unchanged words⟩
⟨17 unchanged words⟩ max_price_usd":{"description":"Optional ceiling: dropcapsCaps whose per-call price is above this, in ⟨12 unchanged words⟩ their own words. Omit to browse the most-usedcaps.Caps.","type":"string"}},"required": ⟨2 unchanged words⟩
⟨20 unchanged words⟩ user asks for a skill, tool, orcapabilityCap — e.g. 'find me a skill for social ⟨37 unchanged words⟩
Take one of the developer'scapabilitiesCaps live. Nothing is reviewed before launch and nobody ⟨9 unchanged words⟩ end-to-end, price book), this publishes thecapCap immediately and agents can call it — and ⟨25 unchanged words⟩ docs and support afterwards and can suspend thecap.Cap. Needs the developer's Qumge key. (Older clients ⟨7 unchanged words⟩
⟨25 unchanged words⟩ string"},"slug":{"description":"Thecap'sCap's slug.","type":"string"}},"required ⟨3 unchanged words⟩
Run acap'sCap's connection test and end-to-end self-test, and record ⟨42 unchanged words⟩ free and one billable operation directly on thecapCap (nothing is charged) and, for a route thecapCap reports itself, waits 2 seconds for its usage report. An MCPcapCap has each listed tool called once instead. It ⟨24 unchanged words⟩
⟨25 unchanged words⟩ string"},"slug":{"description":"Thecap'sCap's slug.","type":"string"}},"required ⟨3 unchanged words⟩
⟨13 unchanged words⟩ live does not need it: an unverifiedcapCap is live and charges callers, but the ⟨79 unchanged words⟩
⟨56 unchanged words⟩ has one — an invalid input is refusedwithas422a tool error (isError), and nothing is charged or forwarded."," ⟨120 unchanged words⟩
⟨22 unchanged words⟩ ,"direct_url":{"type":"string"},"free_call":{"description":"Set when this call used one of the operation's free calls (users who have topped up).","properties":{"limit":{"type":"integer"},"pending":{"type":"boolean"},"remaining":{"type":"integer"},"used":{"type":"integer"}},"type":["object","null"]},"method":{"type":"string"},"path" ⟨19 unchanged words⟩
{"properties":{"qumge_key":{"description":"Optional: your Qumge API key, for clients that cannot set an Authorization header. Takes precedence over the header. Never echoed back.","type":"string"},"slug":{"description":"The cap's slug.", ⟨6 unchanged words⟩
⟨15 unchanged words⟩ "type":["object","null"]},"free_calls":{"description":"First N calls per user are free (accounts that have topped up; failed calls don't count).","type":"integer"},"max_per_call_micro_usd":{"type":["integer","null" ⟨77 unchanged words⟩
{"properties":{"qumge_key":{"description":"Optional: your Qumge API key, for clients that cannot set an Authorization header. Takes precedence over the header. Never echoed back.","type":"string"}},"required":[],"type":"object"}
⟨28 unchanged words⟩ when installing.","type":"boolean"},"qumge_key":{"description":"Optional: your Qumge API key, for clients that cannot set an Authorization header. Takes precedence over the header. Never echoed back.","type":"string"},"slug":{"description":"The skill's slug, ⟨11 unchanged words⟩
⟨25 unchanged words⟩ e.g. 'claude', 'gemini'.","type":"string"},"qumge_key":{"description":"Optional: your Qumge API key, for clients that cannot set an Authorization header. Takes precedence over the header. Never echoed back.","type":"string"}},"required":[],"type":"object"}
⟨193 unchanged words⟩ :"string"},"type":"array"},"manifest_url":{"description":"Optional: publish from the project's qumge.json instead of passing everything by hand. Give https://<domain>/.well-known/qumge.json (or the service address). Its prices are suggestions: confirm them with the developer before submit_cap. With several capabilities in the file, pass `slug` to pick one (one call per capability). Spec: https://qumge.com/docs/caps/manifest","type":"string"},"mcp_tools":{"description":"Prices for the MCP ⟨480 unchanged words⟩ URL slug. Derived from the name when omitted. With manifest_url: picks which capability in the file to publish.","type":"string"},"social_links":{ ⟨74 unchanged words⟩ service. Required for auth_mode api_key (and for balance_delta, and with manifest_url when the file's endpoint auth is api_key). Stored encrypted; sent as Authorization: Bearer." ⟨6 unchanged words⟩
⟨23 unchanged words⟩ estimate and agreed.","type":"boolean"},"qumge_key":{"description":"Optional: your Qumge API key, for clients that cannot set an Authorization header. Takes precedence over the header. Never echoed back.","type":"string"}},"required":["amount_usd"],"type":"object"}
⟨48 unchanged words⟩ the most-used caps.","type":"string"},"qumge_key":{"description":"Optional: your Qumge API key, for clients that cannot set an Authorization header. Takes precedence over the header. Never echoed back.","type":"string"}},"required":[],"type":"object"}
⟨8 unchanged words⟩ "results":{"items":{"properties":{"free_calls":{"additionalProperties":{"type":"integer"},"description":"Operation name → how many calls each topped-up user gets free.","type":"object"},"max_per_call_micro_usd":{"type":"integer"},"measured_calls_7d" ⟨37 unchanged words⟩
⟨92 unchanged words⟩ top-ranked skills instead.","type":"string"},"qumge_key":{"description":"Optional: your Qumge API key, for clients that cannot set an Authorization header. Takes precedence over the header. Never echoed back.","type":"string"}},"required":[],"type":"object"}
{"properties":{"qumge_key":{"description":"Optional: your Qumge API key, for clients that cannot set an Authorization header. Takes precedence over the header. Never echoed back.","type":"string"},"slug":{"description":"The cap's slug.", ⟨6 unchanged words⟩
{"properties":{"qumge_key":{"description":"Optional: your Qumge API key, for clients that cannot set an Authorization header. Takes precedence over the header. Never echoed back.","type":"string"},"slug":{"description":"The cap's slug.", ⟨6 unchanged words⟩
⟨14 unchanged words⟩ it).","type":"boolean"},"qumge_key":{"description":"Optional: your Qumge API key, for clients that cannot set an Authorization header. Takes precedence over the header. Never echoed back.","type":"string"},"url":{"description":"The service's https url ⟨9 unchanged words⟩
Prove the developer owns the domain of their MCP server orAPIAPI.—Goingpublish_capliveneedsdoesitnotforneed it: anMCPunverifiedcap.cap is live and charges callers, but the developer's earnings from it stay frozen until this passes — verifying releases them. Call with the service's https url: if ⟨59 unchanged words⟩
⟨24 unchanged words⟩ },"base_url":{"description":"Where theappAPI lives. Must be https. Required unless you give mcp_url. Any path in it (https://host/v2) is part of what your server receives and is covered by the signature.","type":"string"},"events":{ ⟨158 unchanged words⟩ tool you price with `mcp_tools` becomes one operation.CallsBillingarelooksbilledatperthesuccessfulHTTP(2xx)status only: every tools/call that comes back 2xx is charged at the price youset.set — including a tool result with isError: true. Non-2xx and timeouts are free.","type":"string"},"metering":{ ⟨417 unchanged words⟩ type":"string"}},"required":["name","base_url"],"type":"object"}
⟨18 unchanged words⟩ after publish_cap, before submit_cap. The connection testpingssends three requests to base_url + /qumge/pingtwice(acorrectly signed,requestwrong secret, and aforged10-minute-oldonetimestamp — only the first may succeed); the end-to-end test callstheonerealfreeoperationsandinone billable operation directly on thepricecapbook(nothingonceis—charged)aand,billablefor a routeisthegenuinelycapchargedreportstoitself,thewaitscap's2ownsecondsaccount.for its usage report. An MCP cap has each listed tool called once instead. It warns (without blocking) about billed operations ⟨18 unchanged words⟩
before
—after
{"properties":{"available_micro_usd":{"type":"integer"},"balance_micro_usd":{"type":"integer"},"caps":{"items":{"properties":{"monthly_limit_micro_usd":{"type":"integer"},"name":{"type":"string"},"slug":{"type":"string"},"spent_this_month_micro_usd":{"type":"integer"}},"required":["slug","name"],"type":"object"},"type":"array"},"frozen_micro_usd":{"type":"integer"},"topup_url":{"type":"string"},"withdrawable_micro_usd":{"type":"integer"}},"required":["balance_micro_usd","available_micro_usd","withdrawable_micro_usd"],"type":"object"}before
—after
{"properties":{"files":{"items":{"properties":{"content":{"type":["string","null"]},"path":{"type":"string"}},"required":["path"],"type":"object"},"type":"array"},"include_files":{"type":"boolean"},"name":{"type":["string","null"]},"skill_md":{"type":"string"},"skills_page_url":{"type":"string"},"skipped_files":{"items":{"type":"string"},"type":"array"},"slug":{"type":"string"},"source_url":{"type":"string"}},"required":["slug","name","skill_md"],"type":"object"}before
—after
{"properties":{"categories":{"items":{"properties":{"count":{"type":"integer"},"name":{"type":"string"}},"required":["name","count"],"type":"object"},"type":"array"},"domains":{"items":{"properties":{"key":{"type":"string"},"title":{"type":"string"}},"required":["key","title"],"type":"object"},"type":"array"}},"required":["categories","domains"],"type":"object"}before
—after
{"properties":{"limit":{"type":"integer"},"models":{"items":{"properties":{"id":{"type":"string"},"input_price_per_mtok_usd":{"type":"number"},"name":{"type":"string"},"output_price_per_mtok_usd":{"type":"number"},"provider":{"type":"string"},"slug":{"type":"string"},"vision":{"type":"boolean"}},"required":["id","provider","slug","name"],"type":"object"},"type":"array"},"total":{"type":"integer"}},"required":["models","total"],"type":"object"}before
—after
{"properties":{"category_scheme":{"description":"Which taxonomy the results' category values come from: \"domain\" for browse (no query), \"fine\" for a search.","enum":["domain","fine"]},"has_more":{"type":"boolean"},"limit":{"type":"integer"},"offset":{"type":"integer"},"results":{"items":{"properties":{"category":{"description":"Category under the scheme named by category_scheme: a domain key when it is \"domain\", a fine category when it is \"fine\"; null when the entry has none.","type":["string","null"]},"first_party":{"type":"boolean"},"name":{"type":"string"},"needs":{"items":{"type":"string"},"type":"array"},"slug":{"type":"string"},"source_url":{"type":"string"},"stars":{"type":"integer"},"summary":{"type":"string"},"vetted":{"type":"boolean"}},"required":["slug","name","summary","category","vetted"],"type":"object"},"type":"array"},"returned":{"type":"integer"},"searched_in_english_as":{"type":["string","null"]}},"required":["results","category_scheme"],"type":"object"}Call a capability on the user's behalf and return its response. Use this when you cannot make the HTTP call yourself: qumge charges the user's qumge balance and forwards the call, so the price is identical to calling the cap directly. Operations and prices come from get_cap. Prefer `operation` + `input`: when the operation declares an input_schema, `input` is validated against it before anything is charged or forwarded. Needs the user's qumge key in the Authorization header. A 5xx from the cap is free; a 402 means the user's balance or this cap's monthly limit stopped it. (Older clients may s…
Check one of the developer's own capabilities: its status (draft / review / live / suspended) and how far the publishing checklist has got. Needs the developer's Qumge key. (Older clients may still call this tool as app_status.)
Fetch one capability's operations, prices and how to call it, by the slug returned from search_caps. Call this before using a cap: it lists each operation (by name), its input and output schema when the developer provided one, which routes are billable, the per-call maximum, when the call settles, and the error codes the caller may see. If the request carries the user's Qumge key, it also reports that user's monthly limit for this cap. (Older clients may still call this tool as get_app — it still works.)
What a developer has earned and what is payable: the amount still inside the 30-day holdback, the amount sitting in their wallet (income from capabilities — the only part that can be withdrawn), and what has already been paid out, with the most recent entries. Matured purchase amounts move into the wallet automatically. Needs the developer's Qumge key.
List the developer's own capabilities with their status (draft / live / suspended) and slug. Use it before publishing to see what already exists, and after to check what went live. Needs the developer's qumge key. (Older clients may still call this tool as list_apps.)
What agents searched for on Qumge and found nothing: the demand side of the store, in the searchers' own words, with how often each was searched in the last 7 and 30 days. Useful before building or publishing a capability — it tells you what people already want. Only the search text is stored; no user and no IP.
Publish a capability (cap) to Qumge on the developer's behalf (needs the developer's Qumge key in the Authorization header). Give it a name, the API's HTTPS base_url, and — if you can read them off the project — its price book (events with a unit price) and operations (routes with a per-call ceiling, and a `doc` describing input/output so agents know what to send). It returns a DRAFT cap plus the signing secret and usage key (shown once). Nothing is charged while it is a draft. There is no human review: after test_cap passes, submit_cap takes the cap live immediately, and qumge spot-checks it…
Ask for a payout of the developer's payable balance (capability income only — topped-up money cannot be withdrawn). Call it once without `confirmed` to get the estimate (amount, channel fee, withholding tax, what actually lands), show that to the user, and only then call again with confirmed: true. Needs the developer's Qumge key.
Search Qumge's capabilities — paid services an agent can call, billed per call from the user's Qumge balance. A capability (cap) is somebody's API or MCP server with a price list; to you it is a set of operations. Use this when the user wants something done rather than a skill to install: 'make a promo video', 'transcribe this call'. Returns the best few with pricing, measured success rate and latency, and the slug to pass to get_cap. (Older clients may still call this tool as search_apps — it still works.)
Take one of the developer's capabilities live. Nothing is reviewed before launch and nobody approves it: when the three code-checked items pass (signature, end-to-end, price book), this publishes the cap immediately and agents can call it — and be charged — from then on. Run test_cap first (it records signature + end-to-end; the price book is recorded when it saves). Qumge spot-checks docs and support afterwards and can suspend the cap. Needs the developer's Qumge key. (Older clients may still call this tool as submit_app_review.)
Run a cap's connection test and end-to-end self-test, and record both results on its publishing checklist. Do this after publish_cap, before submit_cap. The connection test pings base_url + /qumge/ping twice (a correctly signed request and a forged one); the end-to-end test calls the real operations in the price book once — a billable route is genuinely charged to the cap's own account. It warns (without blocking) about billed operations that have no `doc`. Needs the developer's Qumge key. (Older clients may still call this tool as test_app.)
Check one of the developer's own apps: its status (draft / review / live / suspended) and how far the §9 review checklist has got. Needs the developer's Qumge key.
Call an app on the user's behalf and return its response. Use this when you cannot make the HTTP call yourself: qumge charges the user's qumge balance and forwards the call, so the price is identical to calling the app directly. Routes and prices come from get_app. Needs the user's qumge key in the Authorization header. A 5xx from the app is free; a 402 means the user's balance or this app's monthly cap stopped it.
Fetch one app's full price book and how to call it, by the slug returned from search_apps. Call this before using an app: it lists which routes are billable, the per-call maximum, when the call settles, and the error codes the caller may see. If the request carries the user's Qumge key, it also reports that user's monthly cap for this app.
List the developer's own apps with their status (draft / live / suspended) and slug. Use it before publishing to see what already exists, and after to check what went live. Needs the developer's qumge key.
Publish an app to Qumge on the developer's behalf (needs the developer's Qumge key in the Authorization header). Give it a name, the app's HTTPS base_url, and — if you can read them off the app — its price book (events with a unit price) and routes (with a per-call ceiling). It returns a DRAFT app plus the signing secret and usage key (shown once). Nothing is charged while it is a draft. There is no human review: after test_app passes, submit_app_review takes the app live immediately, and qumge spot-checks it afterwards (a spot check can suspend it).
Search Qumge's paid apps — hosted services an agent can call, billed per call from the user's Qumge balance. Use this when the user wants something done rather than a skill to install: 'make a promo video', 'transcribe this call'. Returns the best few with pricing, measured success rate and latency, and the slug to pass to get_app.
Take one of the developer's apps live. Nothing is reviewed before launch and nobody approves it: when the three code-checked items pass (signature, end-to-end, price book), this publishes the app immediately and agents can call it — and be charged — from then on. Run test_app first (it records signature + end-to-end; the price book is recorded when it saves). Qumge spot-checks docs and support afterwards and can suspend the app. Needs the developer's Qumge key.
Run an app's connection test and end-to-end self-test, and record both results on its review checklist. Do this after publish_app, before submit_app_review. The connection test pings base_url + /qumge/ping twice (a correctly signed request and a forged one); the end-to-end test calls the real routes in the app's price book once — a billable route is genuinely charged to the app's own account. Needs the developer's Qumge key.
⟨28 unchanged words⟩ when installing.","type":"boolean"},"qumge_key":{"description":"Optional: your Qumge API key, for clients that cannot set an Authorization header. Takes precedence over the header. Never echoed back.","type":"string"},"slug":{"description":"The skill's slug, ⟨11 unchanged words⟩
⟨25 unchanged words⟩ e.g. 'claude', 'gemini'.","type":"string"},"qumge_key":{"description":"Optional: your Qumge API key, for clients that cannot set an Authorization header. Takes precedence over the header. Never echoed back.","type":"string"}},"required":[],"type":"object"}
⟨62 unchanged words⟩ and usage key (shown once). Nothinggoesislivechargedhere:whiletheitdeveloperissubmitsafordraft. There is no human review: afterthat.test_app passes, submit_app_review takes the app live immediately, and qumge spot-checks it afterwards (a spot check can suspend it).
⟨62 unchanged words⟩ :"object"},"type":"array"},"keywords":{"description":"Other names for the same thing, any language, up to 20. Agents search with a request like \"scrape trending TikTok videos\" — the keywords are what makes that find this app.","items":{"type":"string"},"type":"array"},"metering":{"description":"reported (the app ⟨23 unchanged words⟩ the store.","type":"string"},"qumge_key":{"description":"Optional: your Qumge API key, for clients that cannot set an Authorization header. Takes precedence over the header. Never echoed back.","type":"string"},"refund_policy_url":{"description":"Their refund policy, if they have one.","type":"string"},"routes":{"description":"HTTP routes. Billable routes ⟨14 unchanged words⟩ ,"hold_usd":{"type":"number"},"lane":{"description":"standard (default: one ledger row per call) or micro — for routes priced below $0.001. A micro route must settle on_response, its per-call ceiling must be at most $0.01, and calls settle in per-minute buckets instead of one row each.","enum":["standard","micro"],"type":"string"},"method":{"type":"string"},"name" ⟨2 unchanged words⟩ ,"pattern":{"type":"string"},"rate_limit_per_min":{"description":"Micro lanes only: calls per minute per key (default 600).","maximum":3000,"minimum":60,"type":"integer"},"settle":{"enum":["on_response","on_final" ⟨5 unchanged words⟩ :"object"},"type":"array"},"skill_slug":{"description":"Optional. Attach an existing skill from the catalog to this app (its documentation then shows on the app page). Ignored if the slug is unknown.","type":"string"},"slug":{"description":"Optional URL slug. Derived from the name when omitted.","type":"string"},"social_links":{"description":"Up to 6 public URLs for the developer (X, GitHub, LinkedIn, their website). Shown on every app page. The kind is guessed from the domain.","items":{"type":"string"},"type":"array"},"summary":{"description":"One line describing what it does.","type":"string"},"support_url":{"description":"Where users ask for help. Shown on the app page.","type":"string"},"unit_name":{ ⟨13 unchanged words⟩
⟨31 unchanged words⟩ the most-used apps.","type":"string"},"qumge_key":{"description":"Optional: your Qumge API key, for clients that cannot set an Authorization header. Takes precedence over the header. Never echoed back.","type":"string"}},"required":[],"type":"object"}
⟨92 unchanged words⟩ top-ranked skills instead.","type":"string"},"qumge_key":{"description":"Optional: your Qumge API key, for clients that cannot set an Authorization header. Takes precedence over the header. Never echoed back.","type":"string"}},"required":[],"type":"object"}
SubmitTake one of the developer's appsforlive.reviewNothing—isthereviewedstepbeforethatlaunchputsand nobody approves it:inwhen thequeuethreeforcode-checkedaitemshumanpassto(signature,lookend-to-end,at.priceAllbook),fivethischecklistpublishesitemsthemustappalreadyimmediatelyhaveandaagentspassingcanresult,callsoitrun— and be charged — from then on. Run test_app first (it recordstwosignatureof+them;end-to-end; the price book is recorded when it saves).NothingQumgegoesspot-checkslivedocshere.and support afterwards and can suspend the app. Needs the developer's Qumge key.
Open a developer account for the user (needs their qumge key). There is no review and no waiting: it takes effect immediately, and publish_app works right after. Give a display name and an ISO country code; the country decides tax and payout rails later. Payout details and legal name are only needed when the user actually withdraws money.
The user's Qumge balance, plus what each app has spent this month against its monthly cap. Call this before a paid call when the user asks whether they can afford it, and after a 402 that says the balance or a cap stopped the call — it returns the top-up link to hand to the user. Needs the user's qumge key.
List the developer's own apps with their status (draft / live / suspended) and slug. Use it before publishing to see what already exists, and after to check what went live. Needs the developer's qumge key.
Search Qumge's paid apps — hosted services an agent can call, billed per call from the user's Qumge balance. Use this when the user wants something done rather than a skill to install: 'make a promo video', 'transcribe this call'. Returns the best few with pricing, measured success rate and latency, and the slug to pass to get_app.
Submit one of the developer's apps for review — the step that puts it in the queue for a human to look at. All five checklist items must already have a passing result, so run test_app first (it records two of them; the price book is recorded when it saves). Nothing goes live here. Needs the developer's Qumge key.
Run an app's connection test and end-to-end self-test, and record both results on its review checklist. Do this after publish_app, before submit_app_review. The connection test pings base_url + /qumge/ping twice (a correctly signed request and a forged one); the end-to-end test calls the real routes in the app's price book once — a billable route is genuinely charged to the app's own account. Needs the developer's Qumge key.
{"properties":{"include_files":{"description":"Also return the full text of the other files in the skill's folder. Off by default — they can be hundreds of KB. Use it when installing.","type":"boolean"},"slug":{"description":"The skill's slug, ⟨11 unchanged words⟩
Fetch every SKILL.md in one bundle, in a single call. Write each returned skill to .claude/skills/<name>/SKILL.md (or the equivalent for the user's agent) and the whole set is installed — no other step is needed. Get the slug from list_bundles.
List Qumge's skill bundles. A bundle is a hand-picked set of skills that together get ONE job done — e.g. 'see what competitors are posting'. Use this when the user describes a goal rather than naming a tool, then call get_bundle to install the whole set in a single step.
after
{"$defs":{"capability":{"additionalProperties":false,"properties":{"connection":{"pattern":"^[A-Za-z0-9_.-]{1,60}$","type":"string"},"keywords":{"items":{"maxLength":40,"minLength":1,"type":"string"},"maxItems":20,"type":"array"},"name":{"maxLength":100,"minLength":1,"type":"string"},"operations":{"items":{"$ref":"#/$defs/operation"},"maxItems":50,"minItems":1,"type":"array"},"price_hints":{"items":{"additionalProperties":false,"properties":{"label":{"maxLength":60,"minLength":1,"type":"string"},"typical_units":{"minimum":1,"type":"integer"}},"required":["label","typical_units"],"type":"object"},"maxItems":4,"type":"array"},"refund_policy_url":{"$ref":"#/$defs/link"},"slug":{"pattern":"^[a-z0-9][a-z0-9-]{0,59}$","type":"string"},"summary":{"maxLength":500,"minLength":1,"type":"string"},"support_url":{"$ref":"#/$defs/link"},"unit_name":{"pattern":"^[a-z][a-z0-9_ -]{0,29}$","type":"string"}},"required":["name","summary","connection","operations"],"type":"object"},"endpoint":{"additionalProperties":false,"allOf":[{"if":{"properties":{"type":{"const":"api"}}},"then":{"not":{"required":["mcp_url"]},"required":["base_url"]}},{"if":{"properties":{"type":{"const":"mcp"}}},"then":{"not":{"required":["base_url"]},"required":["mcp_url"]}}],"properties":{"auth":{"enum":["api_key","signed"]},"base_url":{"$ref":"#/$defs/https_url"},"mcp_url":{"$ref":"#/$defs/https_url"},"type":{"enum":["api","mcp"]}},"required":["type","auth"],"type":"object"},"execution":{"additionalProperties":false,"allOf":[{"if":{"properties":{"protocol":{"const":"qumge"}},"required":["protocol"]},"then":{"not":{"required":["deadline_field"]}}}],"properties":{"buyer_key_field":{"$ref":"#/$defs/pointer","minLength":1},"cancel":{"$ref":"#/$defs/state_operation"},"completion_timeout_seconds":{"maximum":86400,"minimum":1,"type":"integer"},"deadline_field":{"$ref":"#/$defs/pointer","minLength":1},"delivery":{"additionalProperties":false,"dependentRequired":{"refresh":["retention_seconds","url_fields"]},"properties":{"refresh":{"$ref":"#/$defs/state_operation"},"retention_seconds":{"maximum":31536000,"minimum":1,"type":"integer"},"url_fields":{"items":{"$ref":"#/$defs/pointer","minLength":1},"maxItems":20,"minItems":1,"type":"array","uniqueItems":true}},"type":"object"},"idempotency":{"additionalProperties":false,"properties":{"lookup":{"$ref":"#/$defs/state_operation"},"mode":{"enum":["none","native","lookup"]},"request_id_field":{"$ref":"#/$defs/pointer","minLength":1},"request_id_header":{"maxLength":100,"minLength":1,"pattern":"^[A-Za-z0-9-]+$","type":"string"}},"required":["mode"],"type":"object"},"identity":{"enum":["order","buyer"]},"mapping":{"additionalProperties":false,"properties":{"error":{"$ref":"#/$defs/pointer"},"job_id":{"$ref":"#/$defs/pointer"},"result":{"$ref":"#/$defs/pointer"},"states":{"additionalProperties":{"enum":["queued","running","succeeded","failed"]},"maxProperties":50,"propertyNames":{"maxLength":100,"minLength":1},"type":"object"},"status":{"$ref":"#/$defs/pointer"}},"type":"object"},"mode":{"enum":["sync","async"]},"protocol":{"enum":["native","qumge"]},"status":{"$ref":"#/$defs/state_operation"}},"type":"object"},"https_url":{"maxLength":2000,"pattern":"^https://[A-Za-z0-9.-]+(:[0-9]{1,5})?(/[^\\s?#]*)?$","type":"string"},"link":{"maxLength":2000,"pattern":"^(https://|mailto:)\\S+$","type":"string"},"operation":{"additionalProperties":false,"properties":{"description":{"$ref":"#/$defs/text"},"example_input":{},"execution":{"$ref":"#/$defs/execution"},"free_calls":{"maximum":100,"minimum":0,"type":"integer"},"input_schema":{"type":"object"},"limitations":{"$ref":"#/$defs/text"},"method":{"enum":["GET","POST","PUT","PATCH","DELETE"]},"name":{"pattern":"^[A-Za-z0-9_.-]{1,60}$","type":"string"},"output_schema":{"type":"object"},"path":{"pattern":"^/[^*{}\\s?#]{0,499}$","type":"string"},"price_usd":{"$ref":"#/$defs/usd"},"title":{"$ref":"#/$defs/text"},"tool":{"maxLength":100,"minLength":1,"type":"string"},"when_to_use":{"$ref":"#/$defs/text"}},"type":"object"},"pointer":{"maxLength":500,"pattern":"^(?:|/(?:[^~\\s]|~[01])*)$","type":"string"},"state_operation":{"oneOf":[{"additionalProperties":false,"properties":{"body":{"$ref":"#/$defs/template_object"},"method":{"enum":["GET","POST"]},"path":{"maxLength":500,"pattern":"^/(?:[^*{}\\s?#]|\\{(?:job_id|request_id)\\})*$","type":"string"},"query":{"$ref":"#/$defs/template_object"}},"required":["method","path"],"type":"object"},{"additionalProperties":false,"properties":{"arguments":{"$ref":"#/$defs/template_object"},"tool":{"maxLength":100,"minLength":1,"type":"string"}},"required":["tool"],"type":"object"}]},"template_object":{"additionalProperties":{"$ref":"#/$defs/template_value"},"maxProperties":50,"type":"object"},"template_value":{"anyOf":[{"maxLength":500,"pattern":"^(?:[^{}]|\\{(?:job_id|request_id)\\})*$","type":"string"},{"type":["number","boolean","null"]}]},"text":{"maxLength":2000,"minLength":1,"type":"string"},"usd":{"maximum":50,"minimum":0.001,"type":"number"}},"anyOf":[{"required":["manifest_url"]},{"required":["name"]}],"properties":{"auth_mode":{"description":"Manual service authentication; named connections declare it through connection_config.auth instead. signature (default) verifies signed requests; managed wrappers use trusted context, while legacy signed integrations also answer GET /qumge/ping. api_key sends upstream_token as the developer's Bearer key. Legacy api_key routes require exact paths and meter: platform; managed routes declare execution.","enum":["signature","api_key"],"type":"string"},"balance_json_path":{"description":"Only for balance_delta: where in that response.","type":"string"},"balance_path":{"description":"Only for balance_delta: where we read the balance.","type":"string"},"base_url":{"description":"Where the API lives. Must be https. For manual publication without manifest_url, connection_config, connection_id or mcp_url. Any path in it (https://host/v2) is part of what your server receives and is covered by the signature.","type":"string"},"connection_config":{"additionalProperties":false,"description":"Reusable private service connection. Repeating the same developer/name reuses credentials when endpoint and authentication agree.","properties":{"auth":{"enum":["signed","api_key"]},"base_url":{"type":"string"},"mcp_url":{"type":"string"},"name":{"type":"string"},"type":{"enum":["api","mcp"]}},"required":["name","type","auth"],"type":"object"},"connection_id":{"description":"Existing connection_id returned by publish_cap, belonging to this developer. Use instead of connection_config.","type":"string"},"events":{"description":"Manual price book. unit_price_usd is USD, e.g. 0.10. A managed operation uses one fixed-price event; advanced usage-based events belong to legacy integrations.","items":{"properties":{"key":{"type":"string"},"label":{"type":"string"},"unit_price_usd":{"type":"number"}},"required":["key","unit_price_usd"],"type":"object"},"type":"array"},"keywords":{"description":"Other names for the same thing, any language, up to 20. Agents search with a request like \"scrape trending TikTok videos\" — the keywords are what makes that find this app.","items":{"type":"string"},"type":"array"},"manifest_url":{"description":"Optional: publish from the project's qumge.json instead of passing everything by hand. Give https://<domain>/.well-known/qumge.json (or the service address). Its prices are suggestions: confirm them with the developer before submit_cap. The file supplies name, connection and operations; do not repeat name. Prefer manifest v2 for managed complete results. With several Caps in the file, pass `slug` to pick one (one call per Cap). Spec: https://qumge.com/docs/caps/manifest","type":"string"},"mcp_tools":{"description":"Prices for the MCP tools you want listed. Include execution and result schemas for managed complete-result delivery. Tools you leave out are not published and are reported back to you.","items":{"properties":{"doc":{"description":"Optional input_schema/output_schema overriding tools/list for this result operation.","type":"object"},"execution":{"$ref":"#/$defs/execution"},"name":{"description":"Tool name, exactly as tools/list returns it.","type":"string"},"unit_price_usd":{"description":"Price per complete result, in USD.","type":"number"}},"required":["name","unit_price_usd"],"type":"object"},"type":"array"},"mcp_url":{"description":"Optional: publish an existing remote MCP server instead of an HTTP API. Must be https. The domain does not need to be verified to go live, but earnings stay frozen until verify_domain passes for it. Qumge calls tools/list to discover the tools, and every tool you price with `mcp_tools` becomes one operation. Managed execution charges only after a valid complete result, not queued acceptance. Legacy tools without a managed connection or execution use per-response pricing: successful non-error replies are charged; non-2xx, timeouts, isError: true and JSON-RPC errors are free.","type":"string"},"metering":{"description":"Legacy usage-based mode only: reported (provider reports usage) or balance_delta (Qumge reads its balance). Managed execution needs neither usage reporting nor a usage key.","enum":["reported","balance_delta"],"type":"string"},"name":{"description":"Store name. Required only without manifest_url; manifest publication reads it from the file and ignores this duplicate field.","type":"string"},"qumge_key":{"description":"Optional: your Qumge API key, for clients that cannot set an Authorization header. Takes precedence over the header. Never echoed back.","type":"string"},"refund_policy_url":{"description":"Their refund policy, if they have one.","type":"string"},"routes":{"description":"Manual HTTP operations. Managed routes include execution and input/output schemas; the referenced event supplies the fixed price. Legacy routes use hold_usd as a per-call ceiling.","items":{"properties":{"billable":{"type":"boolean"},"doc":{"description":"What this operation does and what it takes, for agents. Optional, but without it an agent can only guess the input shape (call_cap validates `input` against doc.input_schema).","properties":{"description":{"type":"string"},"example_input":{"type":"object"},"input_schema":{"description":"JSON Schema 2020-12.","type":"object"},"limitations":{"type":"string"},"output_schema":{"description":"JSON Schema 2020-12.","type":"object"},"title":{"type":"string"},"when_to_use":{"type":"string"}},"type":"object"},"event":{"description":"Which price-book event this route bills. Defaults to the first event.","type":"string"},"execution":{"$ref":"#/$defs/execution","description":"Managed fixed result: sync/async invocation, internal status/recovery mapping and order (default) or buyer identity."},"hold_usd":{"type":"number"},"lane":{"description":"standard (default: one ledger row per call) or micro — for routes priced below $0.001. A micro route must settle on_response, its per-call ceiling must be at most $0.01, and calls settle in per-minute buckets instead of one row each.","enum":["standard","micro"],"type":"string"},"meter":{"description":"Managed execution requires platform: Qumge settles one fixed-price unit only on complete delivery, with no usage report. For legacy routes without a managed connection or execution, app (default) requires provider usage reports; platform charges one unit per successful response.","enum":["app","platform"],"type":"string"},"method":{"type":"string"},"name":{"type":"string"},"pattern":{"type":"string"},"rate_limit_per_min":{"description":"Micro lanes only: calls per minute per key (default 600).","maximum":3000,"minimum":60,"type":"integer"},"settle":{"enum":["on_response","on_final","on_result"],"type":"string"}},"required":["pattern"],"type":"object"},"type":"array"},"skill_slug":{"description":"Optional. Attach an existing skill from the catalog to this app (its documentation then shows on the app page). Ignored if the slug is unknown.","type":"string"},"slug":{"description":"Optional URL slug. Derived from the name when omitted. With manifest_url: picks which Cap in the file to publish.","type":"string"},"social_links":{"description":"Up to 6 public URLs for the developer (X, GitHub, LinkedIn, their website). Shown on every app page. The kind is guessed from the domain.","items":{"type":"string"},"type":"array"},"summary":{"description":"One line describing what it does.","type":"string"},"support_url":{"description":"Where users ask for help. Shown on the app page.","type":"string"},"unit_name":{"description":"What users buy, e.g. credit.","type":"string"},"upstream_token":{"description":"The developer's own service key. Required for a new api_key or authenticated MCP connection, and legacy balance_delta. With manifest_url, provide it when the selected connection needs api_key authentication and has no stored key. Reusable connections retain their credentials. Stored encrypted; sent as Authorization: Bearer.","type":"string"}},"type":"object"}