Skip to main content
GET

Overview

Returns the stored tools of a service, each stamped with your readiness. When a service backed by an MCP server has no synced tools yet, the response is an object instead of a list and says what to do next: sync, configure credentials, or complete the server’s own OAuth flow. Get Service Tools at /v1/services/public/{service_id}/tools needs no auth, lists public services only, and always answers with a list. Auth: Required. API key (danube-api-key header) or JWT. A private service is visible to its owner only; everyone else gets 404.

Path Parameters

string
required
The service UUID or slug

Response

The response has two shapes. Check whether the body is an array before reading it.

A list of tools

The common case: a bare JSON array of tool objects in the service’s own order, or an empty array when a service that is not an MCP server has no tools. Each tool has id, name, slug (when set), description, tags, base_url, path, method, version, parameters, output, security_schemes, tips, metadata, service_id, created_at, updated_at, is_paid, price_per_call_cents (when set), x402_enabled, x402_price_usdc_atomic (when set), deprecated, deprecation_message and sunset_date (when set), plus:
string
ready, needs_credential or unavailable for this caller
string
Where to connect the service. Set only when readiness is needs_credential.

An object, when an MCP service has no tools yet

tools is always [] in this shape. One of three variants is returned:
You already hold a credential for the service and its tools are being registered in the background. This read is what starts that when nothing is running, so there is nothing else to call: read again every few seconds until tool_sync.status leaves running (it becomes done, with a tools count, or failed, with an error), then the list is returned as usual.
The service declares how to authenticate and you have not connected it. skipped is always false.
The server uses its own OAuth flow, discovered by probing it. For a remote MCP server with no declared auth, the endpoint connects to the server on the spot; when that connection succeeds without OAuth, the tools are synced and returned as a list.

Example

Both SDKs send a limit query parameter that this endpoint does not read. The Python SDK cuts the list to limit on the client side; the TypeScript SDK returns the whole list.

MCP Tool

This endpoint is also available as the get_service_tools MCP tool. The MCP tool always answers with an object, and derives needs_configuration from each tool’s readiness: