{"serverId":"mcp-registry/io.github.pipehero/pipehero","tools":[{"name":"add_api_example","fixed":{"name":"add_api_example","description":"Save a response example on an endpoint (for instance the 402 your handler returns for a declined card). Replaces the example with the same name, so it is safe to repeat.","inputSchema":{"type":"object","required":["collection_id","name","status"],"properties":{"body":{"description":"Example response body (any JSON).","type":"string"},"name":{"type":"string","description":"e.g. Card declined."},"path":{"type":"string","description":"Route path as written in the code, e.g. /v1/charges/:id or /v1/charges/{id}."},"method":{"type":"string","description":"HTTP method of the route, e.g. POST. Use with path instead of endpoint_id."},"status":{"type":"integer"},"headers":{"type":"array","items":{"type":"object","required":["name","value"],"properties":{"name":{"type":"string"},"value":{"type":"string"}}}},"endpoint_id":{"type":"string","description":"Id of the endpoint. Alternative to method + path."},"status_text":{"type":"string"},"collection_id":{"type":"string","description":"Id from list_api_collections."}}},"annotations":{"title":"Add a response example","readOnlyHint":false,"openWorldHint":false,"idempotentHint":true,"destructiveHint":false}},"changes":[{"kind":"schema","detail":"Added \"type\":\"string\" to untyped parameters: body. Change to number/boolean/array where that's what you accept.","verify":true}],"tokensBefore":291,"tokensAfter":295},{"name":"import_api_spec","fixed":{"name":"import_api_spec","description":"Import an OpenAPI 3.x document (as JSON), a Postman v2.x collection (JSON) or a curl command into a new collection, or into `collection_id`. All or nothing, and plan limits are checked first. Credentials are never imported (they become variables). Convert YAML to JSON before sending.","inputSchema":{"type":"object","required":["format","content"],"properties":{"name":{"type":"string","description":"Name for the new collection."},"format":{"enum":["openapi","postman","har","curl"],"type":"string"},"content":{"description":"The document (object or JSON string), or the curl command.","type":"string"},"collection_id":{"type":"string","description":"Add to this collection instead of creating one."}}},"annotations":{"title":"Import an API spec","readOnlyHint":false,"openWorldHint":false,"idempotentHint":false,"destructiveHint":false}},"changes":[{"kind":"schema","detail":"Added \"type\":\"string\" to untyped parameters: content. Change to number/boolean/array where that's what you accept.","verify":true}],"tokensBefore":203,"tokensAfter":208},{"name":"upsert_api_endpoint","fixed":{"name":"upsert_api_endpoint","description":"Document an endpoint: creates it, or updates the existing one for the same method + path. Use it whenever you add or change a route in the code, so the docs stay true. Only the fields you send change. `path` may use :id, {id} or {{id}} for variables. `folder` is created by name if missing. Send `version` (from get_api_endpoint) to avoid overwriting a teammate's edit; a stale version is rejected.","inputSchema":{"type":"object","required":["collection_id","method","path"],"properties":{"body":{"description":"Example request body (any JSON). null clears it.","type":"string"},"kind":{"enum":["http","event"],"type":"string","description":"`event` for a webhook your app sends."},"name":{"type":"string","description":"Short title, e.g. Create a charge. Defaults to METHOD /path."},"path":{"type":"string"},"folder":{"type":"string","description":"Folder name, e.g. Charges."},"method":{"type":"string"},"params":{"type":"array","items":{"type":"object","required":["name"],"properties":{"in":{"enum":["path","query","header","body"],"type":"string"},"name":{"type":"string"},"type":{"type":"string"},"required":{"type":"boolean"},"description":{"type":"string"}}},"description":"Documented fields."},"headers":{"type":"array","items":{"type":"object","required":["name","value"],"properties":{"name":{"type":"string"},"value":{"type":"string"}}}},"version":{"type":"integer"},"description":{"type":"string"},"collection_id":{"type":"string"}}},"annotations":{"title":"Create or update an API endpoint","readOnlyHint":false,"openWorldHint":false,"idempotentHint":true,"destructiveHint":false}},"changes":[{"kind":"schema","detail":"Added \"type\":\"string\" to untyped parameters: body. Change to number/boolean/array where that's what you accept.","verify":true}],"tokensBefore":411,"tokensAfter":415}],"toolsChanged":3,"tokensSaved":0,"todo":[{"tool":"add_api_example","params":["status","headers","status_text"]},{"tool":"check_api_drift","params":["collection_id"]},{"tool":"create_api_collection","params":["name","description"]},{"tool":"export_api_collection","params":["format","collection_id"]},{"tool":"get_api_collection","params":["collection_id"]},{"tool":"get_request","params":["id","subdomain"]},{"tool":"import_api_spec","params":["format"]},{"tool":"list_api_monitors","params":["collection_id"]},{"tool":"list_requests","params":["subdomain"]},{"tool":"replay_request","params":["id","subdomain"]},{"tool":"run_api_endpoint","params":["confirm_write_to_prod"]},{"tool":"save_captured_request","params":["path","collection_id"]},{"tool":"send_test_webhook","params":["event","provider","subdomain"]},{"tool":"set_long_requests","params":["enabled","subdomain"]},{"tool":"set_ws_passthrough","params":["enabled","subdomain"]},{"tool":"share_api_collection","params":["collection_id"]},{"tool":"upsert_api_endpoint","params":["path","method","headers","version","description","collection_id"]}],"note":"Deterministic fixes. Changes marked verify need a human look before shipping (renames, inferred annotations, inferred types, removed text). Parameter descriptions in `todo` need to be written by someone who knows the API."}