Skip to main content

rotascale-mcp

Govern any agent that speaks the Model Context Protocol — including agents whose code you cannot touch.

pip install rotascale-mcp

Two surfaces, and the difference is the whole point

rotascale-mcp rotascale-mcp-proxy
How it is reached the agent decides to call a governance tool every tool call passes through it
Can the agent avoid it yes no
Enforcement advisory in the tool path

Only the proxy is a control. The server surface is genuinely useful — real evidence, and a real gate for an agent that cooperates — but an agent that never calls authorize_action is not governed by it. We would rather say that plainly than let you find out during an incident.

Rotascale as an MCP server

Adds governance tools to any MCP host. The agent chooses when to call them.

{
  "mcpServers": {
    "rotascale": {
      "command": "rotascale-mcp",
      "env": {
        "ROTASCALE_URL": "https://rotascale.acme.internal",
        "ROTASCALE_API_KEY": "rota_live_…"
      }
    }
  }
}
Tool When the agent calls it
open_trajectory once, at the start of a task
authorize_action before any consequential action — moving money, changing a record, contacting a person
witness_step as it reads and acts; kind="retrieval" is what carries taint
check_authority to see what it may do and what budget remains
close_trajectory when the task ends, success or failure

authorize_action returns an outcome, not a boolean

Six outcomes, each with a different remedy, and a guidance string written for a model to act on:

Outcome What it means
allow proceed
deny outside the granted authority — do not retry, do not route around
exhausted budget or call allowance spent — retrying cannot help
gated the context is tainted and this authority needs a clean one
review_sync a human must decide first
review_async proceed, but it is queued for review

A boolean would collapse these, and an agent that cannot tell exhausted from gated will do the wrong thing about both — usually retrying, which is useless for the first and a security problem for the second.

Transport

stdio by default, because that is how MCP hosts launch a local server. Logging goes to stderr, since stdout is the protocol channel.

ROTASCALE_MCP_TRANSPORT=streamable-http rotascale-mcp

Why a separate package

pip install rotascale must never carry an MCP dependency, and the MCP spec revises on its own schedule. Pinning them together would force pointless releases of one to keep up with the other.

Tracking MCP servers you already use

Separate from this package: the rotascale SDK's watch_mcp wraps an MCP client session and reports each server's tool manifest, so a tool whose description changes is caught — including between sessions. A description is an instruction the model reads, so rewriting one changes what your agent does without changing a line of your code.

from rotascale.middleware import watch_mcp

session = watch_mcp(session, server="filesystem", transport="stdio")

Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

rotascale_mcp-0.1.0.tar.gz (87.4 kB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

rotascale_mcp-0.1.0-py3-none-any.whl (19.4 kB view details)

Uploaded Python 3

File details

Details for the file rotascale_mcp-0.1.0.tar.gz.

File metadata

  • Download URL: rotascale_mcp-0.1.0.tar.gz
  • Upload date:
  • Size: 87.4 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/7.0.0 CPython/3.12.7

File hashes

Hashes for rotascale_mcp-0.1.0.tar.gz
Algorithm Hash digest
SHA256 46ebf62fd949c022ba3da7c9257e20d8aa047d6910b732f03f87e73b9050d13e
MD5 50d9d7eaa9b2caccc945c93ee18d013d
BLAKE2b-256 56303bbf8e41a018780cfd346586058d7bfbe4e21219ce878b4af07b28c5ccd5

See more details on using hashes here.

File details

Details for the file rotascale_mcp-0.1.0-py3-none-any.whl.

File metadata

  • Download URL: rotascale_mcp-0.1.0-py3-none-any.whl
  • Upload date:
  • Size: 19.4 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/7.0.0 CPython/3.12.7

File hashes

Hashes for rotascale_mcp-0.1.0-py3-none-any.whl
Algorithm Hash digest
SHA256 419cee713cf70b3ce7cc45c3cf708150c013e9ef6c966187e606eb5e4e5af258
MD5 eec436e522c44bccffe6e106e791738a
BLAKE2b-256 0ce11290821221150e1cfb4289b9299a4b3e9a2dce0641a35a6d4e27f7b460eb

See more details on using hashes here.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page