Tool catalogue
2 operations (GET): parameters, status codes, refusal bodies, and the same request in curl, HTTP, Python and TypeScript.
Tool catalogue
Base URL: https://api.codespar.dev
None of the operations below takes a credential: the published document declares them open. See Authentication for the rest of the API.
GET /meta-tools.json
https://api.codespar.dev/meta-tools.jsonThe tool catalogue the execute operation dispatches
THE LEGAL VALUES OF tool, and what each one accepts. POST /v1/sessions/{id}/execute names a tool by string; this is the document that gives those strings meaning, one entry per tool with a JSON Schema for its input.
Served with no credential, Access-Control-Allow-Origin: *, cached for five minutes. It carries no tenant data: names, descriptions and schemas, identical for every caller. /meta-tools.json and /v1/meta-tools.json return the same bytes.
READ IT BEFORE CONCLUDING A CAPABILITY IS MISSING. The tool descriptions and their schemas carry contracts this OpenAPI document does not repeat — which action values exist, which arguments are mandatory for which combination, and what a create answers when the instrument is not ready yet. A capability can be fully implemented and still read as absent to someone holding only this document.
Responses
| Status | Body | Description |
|---|---|---|
200 | object | OK |
Response 200
| Field | Type | Required | Description |
|---|---|---|---|
generated_from | "tools/list" | yes | Names the source so the reader does not have to take the document's word for it: this is the same output the MCP transport answers tools/list with, not a second reading of the catalogue that could drift from it. |
tools | array of object | yes | — |
curl -X GET https://api.codespar.dev/meta-tools.json \
-H "Authorization: Bearer $CODESPAR_API_KEY"GET /meta-tools.json HTTP/1.1
Host: api.codespar.dev
Authorization: Bearer $CODESPAR_API_KEYimport os
import requests
res = requests.get(
"https://api.codespar.dev/meta-tools.json",
headers={"Authorization": f"Bearer {os.environ['CODESPAR_API_KEY']}"},
)
res.raise_for_status()
data = res.json()const res = await fetch("https://api.codespar.dev/meta-tools.json", {
method: "GET",
headers: {
Authorization: `Bearer ${process.env.CODESPAR_API_KEY}`,
},
});
const data = await res.json();const result = await cs.api.get("/meta-tools.json");{
"generated_from": "tools/list",
"tools": [
{
"name": "Example",
"description": "string",
"inputSchema": {}
}
]
}GET /v1/meta-tools.json
https://api.codespar.dev/v1/meta-tools.jsonThe tool catalogue, under the /v1 mount
Identical to /meta-tools.json, for a caller already pointed at the versioned prefix. Same bytes, same absence of a credential.
Responses
| Status | Body | Description |
|---|---|---|
200 | object | OK |
Response 200
| Field | Type | Required | Description |
|---|---|---|---|
generated_from | "tools/list" | yes | Names the source so the reader does not have to take the document's word for it: this is the same output the MCP transport answers tools/list with, not a second reading of the catalogue that could drift from it. |
tools | array of object | yes | — |
curl -X GET https://api.codespar.dev/v1/meta-tools.json \
-H "Authorization: Bearer $CODESPAR_API_KEY"GET /v1/meta-tools.json HTTP/1.1
Host: api.codespar.dev
Authorization: Bearer $CODESPAR_API_KEYimport os
import requests
res = requests.get(
"https://api.codespar.dev/v1/meta-tools.json",
headers={"Authorization": f"Bearer {os.environ['CODESPAR_API_KEY']}"},
)
res.raise_for_status()
data = res.json()const res = await fetch("https://api.codespar.dev/v1/meta-tools.json", {
method: "GET",
headers: {
Authorization: `Bearer ${process.env.CODESPAR_API_KEY}`,
},
});
const data = await res.json();const result = await cs.api.get("/v1/meta-tools.json");{
"generated_from": "tools/list",
"tools": [
{
"name": "Example",
"description": "string",
"inputSchema": {}
}
]
}