Tenzro Labs
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.

none
Catalogue tools only: models, machines, operators, routing, packages, payment methods, quotes.
inference
The model tools: chat, embed, forecast.
read
Account tools: balance, activity, orders, keys, plans, rentals, identity, agents.
manage
Action 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/mcp
Transport
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/inspector

Connect 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 }.

model
string
Language model id, for example qwen3.5-4b.
messages
{ role, content }[]
The conversation, oldest first. role is system, user or assistant.
max_tokens
integer, optional
Longest reply, up to the model's limit.
machine
string, 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

model
string
Embedding model id, for example qwen3-embedding-0.6b.
input
string[]
Texts to embed, 1 to 256.
dimensions
integer, optional
A shorter vector, where the model supports it.
input_type
document | query, optional
query for search queries, document otherwise.
machine
string, 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

model
string
Forecasting model id, for example timesfm-2.5-200m.
history
number[]
The series, oldest first. At least two values.
horizon
integer
Steps ahead.
quantiles
number[], optional
Levels between 0 and 1, for example [0.1, 0.5, 0.9].
machine
string, 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.