Sutro mcp setup
Skill adrianjonmiller/sutro-mcp-server/skills/sutro-mcp-setup
Wire the local Sutro MCP server into the user’s editor — security bundle path, env vars, build steps for mcp/sutro.From its SKILL.md
npx -y skills add adrianjonmiller/sutro-mcp-server --skill sutro-mcp-setupAssembled from the repository path, not quoted from the project. Check it against their README if it does not work.
One thing to look at
- 1 stars1 stars. Stars are a popularity signal and not a quality one, but at this level it is likely that nobody has read this closely except its author, and you would be relying on your own review.
SKILL.md
4.3 KB, as published. Nobody here has run it
Sutro MCP setup
Use this skill when the user needs to connect Cursor, Claude Code, or VS Code MCP clients to Sutro tooling.
Prerequisites
- Download security-bundle.zip from Sutro Console and extract it to a stable directory (for example
~/.config/sutro/security-bundle). Do not commit the bundle; it contains private keys and JWTs. - For production-style auth (sign your own Builder JWT), see How to secure connections.
Build the MCP server
From the repo root:
cd mcp/sutro && npm install && npm run build
Configure the client
- Point command / args at
mcp/sutro/dist/index.jswithnode(seeconfig/mcp.cursor-sample.json,config/mcp.vscode-sample.json,config/mcp.claude-sample.json). - Set
SUTRO_SECURITY_BUNDLE_DIRto the directory that containsca.crt,mtls.crt,mtls.key,builder.jwt, andapiClient.id. Use an absolute path in MCPenvif your client does not expand~. A leading~/in the value is expanded by the server using$HOME. - Optionally set
SUTRO_API_BASE(defaulthttps://sapi.withsutro.com).
Verify
Use sutro_validate_bundle first to check local bundle readiness (required files + JWT refresh prerequisites), then run sutro_hello (calls GET /hello) to verify end-to-end connectivity.
Probe live response shapes
When docs are unclear, treat live responses as the contract source of truth:
- From
mcp/sutro, runnpm run sutro-probe-shapes(uses mTLS + bundle bearer auth). - Optional flags:
--project-id=<uuid>to probe/projects/:id/applicationsfor a specific project--timeout-ms=10000to tune request timeout per endpoint--snapshot=./tmp/sutro-shapes.jsonto save a sanitized shape report for comparisons
- Update tool parsers in
mcp/sutro/src/to match observed top-level shapes before trusting docs. - Run
npm testinmcp/sutroto verify normalizers and compatibility fallbacks.
Refresh builder.jwt locally (optional)
If the bundle’s builder.jwt expired but you still have a signing key (signing.pem preferred, fallback mtls.key) and the correct issuer + builder sub, you can mint a short-lived token without pasting passwords into chat:
- Copy
mcp/sutro/.env.exampletomcp/sutro/.env(never commit.env). - Set
SUTRO_SECURITY_BUNDLE_DIR,SUTRO_PROVISION_MODE=sign-only. EnsurejwtIssuer.idand either.sutro-builder-sidorbuilder.id(orSUTRO_BUILDER_SID) match what Sutro expects foriss/subon the Builder JWT (How to secure connections). - From
mcp/sutro:npm installthennode --env-file=.env scripts/sutro-provision-from-env.mjs(ornpm run sutro-provisionwith the same env loaded).
For a full org init + new builder (only when your org can run /initialization), set SUTRO_PROVISION_MODE=full plus SUTRO_ORG_EMAIL, SUTRO_ORG_PASSWORD, SUTRO_COMMON_NAME, and SUTRO_JWT_ISSUER per the doc.
Adding more tools
- Implement additional Sutro HTTP calls via the same bundle auth pattern in
mcp/sutro/src/; keep tool names stable and extendrules/sutro.mdcwhen you add tools. - Use zod input schemas per tool.
Edit and ship workflow
- Use
sutro_list_projectsandsutro_list_appsfor discovery (includeScode=falseby default for lighter payloads). - Use
sutro_pull_project_dataorsutro_pull_app_for_editwhen you need full SCode context before making changes. - Apply changes with
sutro_deploy_slang, or usesutro_apply_slang_changesfor deploy + status verification (+ optional publish) in one call. For release workflows, publish options includeversionTypeandreplacePublishedVersion. - If the SLang file is already on disk, use
sutro_apply_slang_from_fileto avoid sending large inline payloads through tool arguments.