Platform MCP Server
Let AI agents act on your TelemetryOS account with scoped, least-privilege tokens
What is the Platform MCP Server?
The TelemetryOS Platform MCP Server lets AI agents and automation tools take real actions in your TelemetryOS account — scheduling content, updating devices, pulling logs, managing playlists — through a standards-based Model Context Protocol endpoint.
It is distinct from the Documentation MCP Server. The two are complementary:
| Server | Endpoint | Purpose |
|---|---|---|
| Documentation MCP | https://docs.telemetryos.com/mcp | Read-only access to TelemetryOS documentation. No account data. |
| Platform MCP | https://mcp.telemetryos.com/mcp | Act on your account. Requires an MCP token with explicit permissions. |
Use the Documentation MCP to ground an AI assistant's answers in the docs. Use the Platform MCP when you want the assistant to actually change something in your TelemetryOS account.
The Platform MCP Server gives agents the ability to modify your account. Grant the narrowest permissions that still let the agent do its job, and set an expiry date.
How Permissions Work
Every request to the Platform MCP is authenticated with an MCP token and authorized against that token's permission set. Permissions are expressed as dot-notation strings and enforced by the gateway before any backend service is called.
Resources and Actions
Permissions combine a resource and an action:
| Resource | What it covers |
|---|---|
devices | Screens and players registered to the account |
media | Images, videos, and other uploaded assets |
playlists | Ordered content schedules assigned to devices |
applications | Apps deployed to devices |
overrides | Temporary schedule overrides |
metrics | Device and content performance metrics |
logs | Device and system logs |
webhooks | Outbound event subscriptions |
Each resource supports four actions: read, create, update, and delete.
Resources that aren't part of your account's plan cannot be added to a token — they're rejected at token creation.
Field Restrictions
For read, create, and update, you can optionally restrict a permission to specific fields on the resource. delete is always action-level — there are no partial deletes.
| Permission | What the agent can do |
|---|---|
devices.read | Read every field of every device |
devices.read.name | Read devices, but only the name field appears in responses |
devices.read.name + devices.read.status | Read devices, but only the name and status fields |
devices.update | Update any field on a device |
devices.update.playlist_id | Update only the playlist_id field |
media.create.title | Create media, but only set the title field on creation |
How restrictions are enforced:
- On
read, the response payload is filtered to the permitted fields before it's returned. Identifier fields (id,_id) are always included. - On
createandupdate, non-permitted fields in the request are rejected. - Field filtering is applied at the top level of the response. Nested objects pass through unfiltered.
Precedence rule: broader always wins. If a token has both devices.update and devices.update.name, the broader devices.update takes effect — the agent can update any field. The same applies to read.
Field-restricted
createcan conflict with server-required fields. If your token only permitsmedia.create.titlebut the server also requires aurl, the request will fail validation. Confirm your field list covers every required field for the resource before issuing the token.
Example Scopes
Three common agent profiles and the permissions they need:
| Agent | Permissions |
|---|---|
| Read-only monitoring agent | devices.read.name, devices.read.status, logs.read |
| Playlist scheduler | playlists.read, devices.read.name, devices.update.playlist_id |
| Content uploader | media.create, media.read, playlists.update |
Creating a Token
MCP tokens are created by account admins in Studio under Account Settings → MCP Tokens.
- Name the token. Use a name that identifies the integration (e.g., "Playlist Scheduler — Claude Code").
- Build permissions using the matrix. Rows are resources, columns are
read,create,update,delete. Check the cells the agent needs. Forread,create, andupdate, you can optionally expand the cell to restrict it to specific fields. Plan-gated resources appear as disabled rows. - Set an expiry (recommended). Short-lived tokens reduce blast radius if leaked.
- Create the token.
On creation, Studio shows the plaintext token once. Copy it immediately — it is never stored and cannot be retrieved again. If you lose it, revoke the token and create a new one.
The creation success screen also shows ready-to-paste config snippets for Codex and Claude Code.
Connecting a Client
Set the token as an environment variable so it never ends up in a config file or repository:
export TELEMETRYOS_MCP_TOKEN="m..."Add to .mcp.json:
{
"mcpServers": {
"telemetryos": {
"type": "http",
"url": "https://mcp.telemetryos.com/mcp",
"headers": {
"Authorization": "Bearer ${TELEMETRYOS_MCP_TOKEN}"
}
}
}
}Once connected, the client will discover the MCP tools your token permits. A read-only monitoring token will see only the read tools; an update-capable token will also see update tools. Tools the token doesn't permit are not advertised.
Quotas and Rate Limits
Platform MCP calls count against your account's API usage quota, the same way direct API calls do. Each token also has its own rate limit.
Every metered response includes these headers:
API-Rate-Limit— the token's per-window limitAPI-Rate-Limit-Remaining— calls remaining in the current windowAPI-Rate-Limit-Reset— seconds until the window resets
When a token is rate-limited, the server returns 429 Too Many Requests with a Retry-After header. When the account's API quota is exhausted, further calls are rejected until usage flushes.
Revoking a Token
Any admin can revoke a token from the token list in Studio. Revocation is immediate — the next request made with that token is rejected. Revocation is permanent; a revoked token cannot be re-enabled.
Tokens with an expiry date are automatically rejected after their expiry time passes.
Security Best Practices
- One token per integration. Don't share tokens across agents or environments. If you need to revoke access for one, you shouldn't have to disrupt another.
- Grant the narrowest permissions that work. Start with
readonly. Addupdateorcreateonly when the agent demonstrably needs it. Avoiddeleteunless it's the whole point of the integration. - Use field restrictions for high-privilege actions. A token that can only update
playlist_idis dramatically safer than one that can update any device field. - Set short expiries. 30–90 days is a reasonable default for most integrations. Rotate tokens rather than keeping them alive indefinitely.
- Never commit tokens. Use environment variables and secret managers.
- Revoke on suspicion. If you're unsure whether a token has been exposed, revoke it and issue a new one. The cost is seconds; the alternative can be a security incident.
Troubleshooting
| Symptom | Likely cause |
|---|---|
401 Unauthorized | Token is invalid, revoked, or expired. Check the token value and its status in Studio. |
403 Forbidden on a tool call | Token lacks the required resource.action permission. Update the token's permissions or issue a new one. |
| Expected fields missing from a response | Token's read permission is field-restricted. Check which fields the token permits. |
400 Validation error on create | Token's create permission is field-restricted below the server's required fields. Expand permitted fields or issue a token with full create. |
429 Too Many Requests | Rate limit hit. Honor Retry-After, or reduce call volume. Persistent 429s suggest the account API quota is exhausted. |
| Tool not visible in the client | Token doesn't permit that tool's action. tools/list is filtered per token. |
Updated about 4 hours ago