Server definition
- Hash
- sha256:7885ee745a4445cc48b20c303dda25c27bd8d99883f02a177e51b88d119a9bec
- What it is
- What a remote MCP server returned when asked what it offers: 18 tools
The blob, as servednamed by its sha256
{
"instructions": null,
"tools": [
{
"description": "Open a developer account for the user (needs their qumge key). There is no review and no waiting: it takes effect immediately, and publish_cap 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.",
"inputSchema": {
"properties": {
"country": {
"description": "ISO code like \"US\" or \"CN\" (a full country name also works).",
"type": "string"
},
"display_name": {
"description": "The name shown on their app pages.",
"type": "string"
},
"entity_type": {
"description": "individual (default) or company.",
"enum": [
"individual",
"company"
],
"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"
},
"social_links": {
"description": "Up to 6 public URLs (X, GitHub, LinkedIn, their website). The kind is guessed from the domain.",
"items": {
"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"
},
"name": "become_developer",
"outputSchema": {
"properties": {
"country": {
"type": "string"
},
"display_name": {
"type": "string"
},
"status": {
"type": "string"
}
},
"required": [
"display_name",
"country"
],
"type": "object"
}
},
{
"description": "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 still call this tool as call_app — it still works.)",
"inputSchema": {
"properties": {
"accept": {
"description": "Optional Accept header.",
"type": "string"
},
"body": {
"description": "Request body. An object is sent as JSON; a string is sent as-is.",
"type": [
"object",
"string"
]
},
"content_type": {
"description": "Only needed when `body` is a string and the app expects a specific type.",
"type": "string"
},
"input": {
"description": "Arguments for the operation. Validated against its input_schema when it has one — an invalid input is refused with 422, and nothing is charged or forwarded.",
"type": "object"
},
"method": {
"description": "HTTP method. Default GET — the routes and their methods are in get_cap.",
"enum": [
"GET",
"POST",
"PUT",
"PATCH",
"DELETE",
"HEAD",
"OPTIONS"
],
"type": "string"
},
"operation": {
"description": "Operation name from get_cap (a route's `name`). Use with `input`; takes precedence over `path`/`method` when both are given.",
"type": "string"
},
"path": {
"description": "The route path from get_cap, e.g. '/api/videos'. A query string may be appended or passed separately in `query`.",
"type": "string"
},
"query": {
"description": "Query string without the 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 cap's slug, from search_caps.",
"type": "string"
}
},
"required": [
"slug"
],
"type": "object"
},
"name": "call_cap",
"outputSchema": {
"properties": {
"binary": {
"type": "boolean"
},
"body": {
"type": "string"
},
"body_bytes": {
"type": "integer"
},
"call_id": {
"type": [
"string",
"null"
]
},
"charged_micro_usd": {
"type": [
"integer",
"null"
]
},
"content_type": {
"type": [
"string",
"null"
]
},
"direct_url": {
"type": "string"
},
"method": {
"type": "string"
},
"path": {
"type": "string"
},
"remaining_micro_usd": {
"type": [
"integer",
"null"
]
},
"status": {
"type": "integer"
},
"truncated": {
"type": "boolean"
}
},
"required": [
"status",
"method",
"path",
"body"
],
"type": "object"
}
},
{
"description": "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.)",
"inputSchema": {
"properties": {
"slug": {
"description": "The cap's slug.",
"type": "string"
}
},
"required": [
"slug"
],
"type": "object"
},
"name": "cap_status",
"outputSchema": {
"properties": {
"checks": {
"additionalProperties": {
"properties": {
"note": {
"type": [
"string",
"null"
]
},
"status": {
"type": "string"
}
},
"required": [
"status"
],
"type": "object"
},
"type": "object"
},
"name": {
"type": "string"
},
"reviewer_note": {
"type": [
"string",
"null"
]
},
"slug": {
"type": "string"
},
"status": {
"type": "string"
}
},
"required": [
"slug",
"status",
"checks"
],
"type": "object"
}
},
{
"description": "The user's Qumge balance, plus what each capability has spent this month against its monthly limit. 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 limit stopped the call — it returns the top-up link to hand to the user. Needs the user's qumge key.",
"inputSchema": {
"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"
},
"name": "get_balance",
"outputSchema": {
"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"
}
},
{
"description": "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.)",
"inputSchema": {
"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, e.g. 'autowhisper'. Comes from search_caps.",
"type": "string"
}
},
"required": [
"slug"
],
"type": "object"
},
"name": "get_cap",
"outputSchema": {
"properties": {
"monthly_limit_micro_usd": {
"type": [
"integer",
"null"
]
},
"name": {
"type": "string"
},
"operations": {
"items": {
"properties": {
"billable": {
"type": "boolean"
},
"doc": {
"type": [
"object",
"null"
]
},
"max_per_call_micro_usd": {
"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": {
"type": [
"string",
"null"
]
},
"pattern": {
"type": "string"
},
"settles": {
"type": [
"string",
"null"
]
},
"unit": {
"type": [
"string",
"null"
]
},
"unit_price_micro_usd": {
"type": [
"integer",
"null"
]
}
},
"required": [
"method",
"pattern",
"billable"
],
"type": "object"
},
"type": "array"
},
"price_line": {
"type": "string"
},
"slug": {
"type": "string"
},
"spent_this_month_micro_usd": {
"type": [
"integer",
"null"
]
},
"summary": {
"type": [
"string",
"null"
]
}
},
"required": [
"slug",
"name",
"price_line",
"operations"
],
"type": "object"
}
},
{
"description": "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.",
"inputSchema": {
"properties": {},
"required": [],
"type": "object"
},
"name": "get_earnings",
"outputSchema": {
"properties": {
"entries": {
"items": {
"properties": {
"amount_micro_usd": {
"type": "integer"
},
"available_at": {
"type": [
"string",
"null"
]
},
"date": {
"type": "string"
},
"frozen_host": {
"type": [
"string",
"null"
]
},
"type": {
"type": "string"
}
},
"required": [
"date",
"type",
"amount_micro_usd"
],
"type": "object"
},
"type": "array"
},
"frozen_micro_usd": {
"type": "integer"
},
"next_payable_on": {
"type": [
"string",
"null"
]
},
"paid_gross_micro_usd": {
"type": "integer"
},
"paid_net_micro_usd": {
"type": "integer"
},
"payable_micro_usd": {
"type": "integer"
},
"pending_micro_usd": {
"type": "integer"
},
"pending_payouts": {
"type": "integer"
}
},
"required": [
"pending_micro_usd",
"payable_micro_usd"
],
"type": "object"
}
},
{
"description": "Fetch the full SKILL.md content of one skill, by the slug returned from search_skills. Write the returned markdown to .claude/skills/<name>/SKILL.md (or the equivalent for the user's agent). If the reply says the skill ships more files (REFERENCE.md, scripts/…), call again with include_files: true to get them and write each next to SKILL.md.",
"inputSchema": {
"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"
},
"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, e.g. 'AgriciDaniel/claude-seo/seo-google'. Comes from search_skills.",
"type": "string"
}
},
"required": [
"slug"
],
"type": "object"
},
"name": "get_skill",
"outputSchema": {
"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"
}
},
{
"description": "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.)",
"inputSchema": {
"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"
},
"name": "list_caps",
"outputSchema": {
"properties": {
"caps": {
"items": {
"properties": {
"name": {
"type": "string"
},
"self_tests_passed": {
"type": [
"integer",
"null"
]
},
"self_tests_total": {
"type": "integer"
},
"slug": {
"type": "string"
},
"status": {
"type": "string"
},
"suspended_reason": {
"type": [
"string",
"null"
]
}
},
"required": [
"slug",
"name",
"status"
],
"type": "object"
},
"type": "array"
}
},
"required": [
"caps"
],
"type": "object"
}
},
{
"description": "List the skill categories and how many skills are in each. Useful when the user is browsing rather than looking for something specific.",
"inputSchema": {
"properties": {},
"type": "object"
},
"name": "list_categories",
"outputSchema": {
"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"
}
},
{
"description": "List the models this gateway can route to, best first. Every one is reachable with the same Qumge key — no per-vendor signup. Only tool-calling models are listed: an agent cannot use the others.",
"inputSchema": {
"properties": {
"limit": {
"description": "How many to return. Default 20, max 60.",
"maximum": 60,
"minimum": 1,
"type": "integer"
},
"query": {
"description": "Optional. Filter by name or vendor, 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"
},
"name": "list_models",
"outputSchema": {
"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"
}
},
{
"description": "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.",
"inputSchema": {
"properties": {
"limit": {
"description": "How many to return. Default 20, max 50.",
"maximum": 50,
"minimum": 1,
"type": "integer"
}
},
"required": [],
"type": "object"
},
"name": "list_wanted",
"outputSchema": {
"properties": {
"wanted": {
"items": {
"properties": {
"query": {
"type": "string"
},
"searches_30d": {
"type": "integer"
},
"searches_7d": {
"type": "integer"
}
},
"required": [
"query",
"searches_7d",
"searches_30d"
],
"type": "object"
},
"type": "array"
}
},
"required": [
"wanted"
],
"type": "object"
}
},
{
"description": "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 the developer's behalf (needs the developer's Qumge key in 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 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 afterwards (a spot check can suspend it). (Older clients may still call this tool as publish_app.)",
"inputSchema": {
"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"
},
"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. Billing looks at the HTTP status only: every tools/call that comes back 2xx is charged at the price you set — including a tool result with isError: true. Non-2xx and timeouts 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.",
"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). Stored encrypted; sent as Authorization: Bearer.",
"type": "string"
}
},
"required": [
"name"
],
"type": "object"
},
"name": "publish_cap",
"outputSchema": {
"properties": {
"name": {
"type": "string"
},
"price_book_version": {
"type": [
"integer",
"null"
]
},
"signing_secret": {
"type": [
"string",
"null"
]
},
"skipped_tools": {
"items": {
"type": "string"
},
"type": "array"
},
"slug": {
"type": "string"
},
"status": {
"type": "string"
},
"usage_key": {
"type": [
"string",
"null"
]
}
},
"required": [
"slug",
"name",
"status"
],
"type": "object"
}
},
{
"description": "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.",
"inputSchema": {
"properties": {
"amount_usd": {
"description": "How much to withdraw, in US dollars.",
"type": "number"
},
"confirmed": {
"description": "Set true only after the user has seen the estimate and agreed.",
"type": "boolean"
}
},
"required": [
"amount_usd"
],
"type": "object"
},
"name": "request_payout",
"outputSchema": {
"properties": {
"amount_micro_usd": {
"type": "integer"
},
"fee_micro_usd": {
"type": [
"integer",
"null"
]
},
"net_micro_usd": {
"type": [
"integer",
"null"
]
},
"payout_id": {
"type": [
"integer",
"null"
]
},
"requested": {
"type": "boolean"
},
"status": {
"type": [
"string",
"null"
]
},
"withholding_tax_micro_usd": {
"type": [
"integer",
"null"
]
}
},
"required": [
"requested",
"amount_micro_usd"
],
"type": "object"
}
},
{
"description": "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.)",
"inputSchema": {
"properties": {
"limit": {
"description": "How many to return. Default 5, max 10.",
"maximum": 10,
"minimum": 1,
"type": "integer"
},
"max_price_usd": {
"description": "Optional ceiling: drop caps whose per-call price is above this, in US dollars.",
"type": "number"
},
"query": {
"description": "What the user wants done, in their own words. Omit to browse 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"
},
"name": "search_caps",
"outputSchema": {
"properties": {
"limit": {
"type": "integer"
},
"query": {
"type": [
"string",
"null"
]
},
"results": {
"items": {
"properties": {
"max_per_call_micro_usd": {
"type": "integer"
},
"measured_calls_7d": {
"type": "integer"
},
"name": {
"type": "string"
},
"p50_latency_ms": {
"type": [
"integer",
"null"
]
},
"price_line": {
"type": "string"
},
"slug": {
"type": "string"
},
"success_rate": {
"type": [
"integer",
"null"
]
},
"summary": {
"type": "string"
}
},
"required": [
"slug",
"name",
"price_line"
],
"type": "object"
},
"type": "array"
},
"returned": {
"type": "integer"
}
},
"required": [
"results"
],
"type": "object"
}
},
{
"description": "Search Qumge's curated catalog of agent skills (SKILL.md files) by what the user wants to accomplish. Use this whenever the user asks for a skill, tool, or capability — e.g. 'find me a skill for social media automation', 'is there a skill for SEO audits'. Returns the best few, ranked by how useful they actually are (an LLM read each one), with a one-line summary and the exact slug to pass to get_skill.",
"inputSchema": {
"properties": {
"category": {
"description": "Optional. Narrow to one category. Call list_categories to see them.",
"enum": [
"automation-workflow",
"api-integration",
"ai-agent-dev",
"design-frontend",
"data-analytics",
"code-review-debug",
"content-writing",
"code-write-refactor",
"marketing-growth",
"testing",
"documentation",
"devops-security",
"database",
"personal-productivity",
"files-spreadsheets",
"other"
],
"type": "string"
},
"limit": {
"description": "How many to return. Default 5, max 10.",
"maximum": 10,
"minimum": 1,
"type": "integer"
},
"offset": {
"description": "Skip this many results — for paging through a long list.",
"minimum": 0,
"type": "integer"
},
"query": {
"description": "What the user wants to do, in their own words. e.g. 'automate posting to social media', 'extract tables from PDFs'. Omit it to browse the 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"
},
"name": "search_skills",
"outputSchema": {
"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"
}
},
{
"description": "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.)",
"inputSchema": {
"properties": {
"slug": {
"description": "The cap's slug.",
"type": "string"
}
},
"required": [
"slug"
],
"type": "object"
},
"name": "submit_cap",
"outputSchema": {
"properties": {
"slug": {
"type": "string"
},
"status": {
"type": "string"
}
},
"required": [
"slug",
"status"
],
"type": "object"
}
},
{
"description": "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 sends three requests to base_url + /qumge/ping (correctly signed, wrong secret, and a 10-minute-old timestamp — only the first may succeed); the end-to-end test calls one free and one billable operation directly on the cap (nothing is charged) and, for a route the cap reports itself, waits 2 seconds for its usage report. An MCP cap has each listed tool called once instead. 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.)",
"inputSchema": {
"properties": {
"slug": {
"description": "The cap's slug.",
"type": "string"
}
},
"required": [
"slug"
],
"type": "object"
},
"name": "test_cap",
"outputSchema": {
"properties": {
"connection_passed": {
"type": [
"boolean",
"null"
]
},
"connection_summary": {
"type": [
"string",
"null"
]
},
"end_to_end_passed": {
"type": "boolean"
},
"end_to_end_summary": {
"type": [
"string",
"null"
]
},
"missing": {
"items": {
"type": "string"
},
"type": "array"
},
"slug": {
"type": "string"
}
},
"required": [
"slug",
"end_to_end_passed"
],
"type": "object"
}
},
{
"description": "Prove the developer owns the domain of their MCP server or API. Going live does not need it: an unverified 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 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.",
"inputSchema": {
"properties": {
"check": {
"description": "true = look for the line now (after the user deployed it).",
"type": "boolean"
},
"url": {
"description": "The service's https url, e.g. https://api.example.com/mcp",
"type": "string"
}
},
"required": [
"url"
],
"type": "object"
},
"name": "verify_domain",
"outputSchema": {
"properties": {
"dns_txt": {
"type": [
"string",
"null"
]
},
"host": {
"type": "string"
},
"put_at": {
"type": [
"string",
"null"
]
},
"verification_line": {
"type": [
"string",
"null"
]
},
"verified": {
"type": "boolean"
}
},
"required": [
"host",
"verified"
],
"type": "object"
}
}
]
}Verify it yourself
curl -s https://api.teppi.xyz/v1/evidence/sha256:7885ee745a4445cc48b20c303dda25c27bd8d99883f02a177e51b88d119a9bec | sha256sum