Tutorial 03 · MCP server
Give an agent the models over MCP
The Platform MCP server gives Claude Code, Cursor, VS Code or any MCP client the models as tools, with one Platform API key.
Step 01
Create a key for the assistant
On the API keys page, create a key for the assistant. Its permissions decide which tools work.
Permission
Tools it unlocks
noneCatalogue tools only: models, machines, operators, routing, packages, payment methods, quotes.
inferenceThe model tools:
chat, embed, forecast.readAccount tools: balance, activity, orders, keys, plans, rentals, identity, agents.
manageAction tools: create keys and agents, prepare orders, redeem tickets.
Model calls through MCP are paid like API calls: from your credits, or covered by the rental or subscription the key belongs to.
Step 02
Note the server address
URL
https://platform.tenzro.xyz/api/mcpTransport
Streamable HTTP (stateless)
Auth
Authorization: Bearer tzl_...Step 03
Connect your client
Claude Code
shell
claude mcp add --transport http tenzro-labs https://platform.tenzro.xyz/api/mcp \
--header "Authorization: Bearer tzl_..."Cursor
In ~/.cursor/mcp.json, or .cursor/mcp.json in a project:
json · mcp.json
{
"mcpServers": {
"tenzro-labs": {
"url": "https://platform.tenzro.xyz/api/mcp",
"headers": {
"Authorization": "Bearer tzl_..."
}
}
}
}VS Code
In .vscode/mcp.json. VS Code prompts for the key instead of storing it in the file.
json · .vscode/mcp.json
{
"inputs": [
{
"type": "promptString",
"id": "tenzro-key",
"description": "Tenzro Labs API key",
"password": true
}
],
"servers": {
"tenzro-labs": {
"type": "http",
"url": "https://platform.tenzro.xyz/api/mcp",
"headers": {
"Authorization": "Bearer ${input:tenzro-key}"
}
}
}
}Claude Desktop and other stdio clients
Bridge to the HTTP server with mcp-remote in claude_desktop_config.json:
json · claude_desktop_config.json
{
"mcpServers": {
"tenzro-labs": {
"command": "npx",
"args": [
"-y",
"mcp-remote",
"https://platform.tenzro.xyz/api/mcp",
"--header",
"Authorization:${TENZRO_AUTH}"
],
"env": {
"TENZRO_AUTH": "Bearer tzl_..."
}
}
}
}Check the connection
shell
npx @modelcontextprotocol/inspectorConnect the inspector to the URL above with the same header and list the tools.
Step 04
Call a language model with chat
chat sends a conversation to a language model and returns { model, reply, usage }.
Argument
Type
Meaning
modelstring
Language model id, for example qwen3.5-4b.
messages{ role, content }[]
The conversation, oldest first. role is system, user or assistant.
max_tokensinteger, optional
Longest reply, up to the model's limit.
machinestring, optional
Where to run the model. Defaults to tenzro-partner-cluster.
tool call · chat
{
"model": "qwen3.5-4b",
"messages": [
{ "role": "system", "content": "Answer in one sentence." },
{ "role": "user", "content": "What is TNZO used for?" }
],
"max_tokens": 200
}Step 05
Embed texts with embed
Argument
Type
Meaning
modelstring
Embedding model id, for example qwen3-embedding-0.6b.
inputstring[]
Texts to embed, 1 to 256.
dimensionsinteger, optional
A shorter vector, where the model supports it.
input_typedocument | query, optional
query for search queries, document otherwise.
machinestring, optional
Defaults to tenzro-partner-cluster.
tool call · embed
{
"model": "qwen3-embedding-0.6b",
"input": ["first passage", "second passage", "third passage"],
"dimensions": 256
}Step 06
Forecast a series with forecast
Argument
Type
Meaning
modelstring
Forecasting model id, for example timesfm-2.5-200m.
historynumber[]
The series, oldest first. At least two values.
horizoninteger
Steps ahead.
quantilesnumber[], optional
Levels between 0 and 1, for example [0.1, 0.5, 0.9].
machinestring, optional
Defaults to tenzro-partner-cluster.
tool call · forecast
{
"model": "timesfm-2.5-200m",
"history": [112, 118, 132, 129, 121, 135, 148, 148, 136, 119],
"horizon": 6,
"quantiles": [0.1, 0.5, 0.9]
}Step 07
Ask in plain language
The assistant picks the tools. list_models, get_model, list_machines and route_model work without a key, so it can find a model before it calls one.
- Which machines are online right now, and which models is each one serving?
- Embed these three passages with Qwen3-Embedding and tell me which two are closest.
- Forecast the next six values of this series with an 80% band.
- How much credit do I have left, and what did I spend it on this week?
No tool moves money. Tools that change things are marked non-read-only, so clients ask before running them. Give an assistant a
read-only or inference-only key when that is all it needs.