Connect an AI agent

ShopPrentice Studio is an OAuth-protected Streamable HTTP MCP server (Model Context Protocol). Any MCP client — Codex, Claude Code, Claude desktop, Cursor, your own agent — connects to one endpoint and your browser does the sign-in.

MCP endpointhttps://shopprentice.com/mcp
TransportStreamable HTTP
AuthenticationOAuth 2.1 in your browser (authorization code + PKCE, dynamic client registration) — discovered automatically by the client
Scopestudio
API keyNone. Do not ask the user for an API key or a bearer token; add the URL with no headers and approve the sign-in the client opens.
Agent brief/llms.txt

Not to be confused with the open-source woodworking skill for Fusion 360 or a local Fusion 360 MCP on localhost:9100 — those drive Fusion. This endpoint is the studio's own engine, hosted here, and it needs nothing installed.

Codex CLI

codex mcp add shopprentice --url https://shopprentice.com/mcp

Or in ~/.codex/config.toml:

[mcp_servers.shopprentice]
url = "https://shopprentice.com/mcp"

Codex opens the browser sign-in on first use; if it did not (codex mcp list shows Not logged in), run codex mcp login shopprentice — with whatever name you gave the server.

Claude Code

claude mcp add --transport http shopprentice https://shopprentice.com/mcp

Then /mcp inside Claude Code → shopprentice → Authenticate if the browser did not open by itself. Claude desktop / claude.ai: Settings → Connectors → Add custom connector → paste the endpoint URL, leave the OAuth fields empty.

Any other MCP client

{"mcpServers": {"shopprentice": {"url": "https://shopprentice.com/mcp"}}}

Cursor, Windsurf, VS Code, Gemini CLI and most desktop clients take this shape (some name the key servers or add "type": "http"). Add it with no headers and complete the sign-in the client opens.

Server shows 0 tools, or “not logged in”?

Then the sign-in is not finished — an MCP client lists no tools at all until it is. Finish it, then reload the tools:

Agents: never build by driving this website in a browser (the chat, the waitlist, the project pages). The MCP tools are the way to build — if you have none, stop and ask the user to finish the sign-in above.

The server name is yours to choose. The recipes here call it shopprentice, but any name works — just use the same name everywhere (add, login, and any config or skill that refers to it). A name mismatch shows up as “unknown MCP server”.

What happens on the wire

  1. Your client sends a request to https://shopprentice.com/mcp with no credential and receives 401 with WWW-Authenticate: Bearer resource_metadata="https://shopprentice.com/.well-known/oauth-protected-resource/mcp", scope="studio".
  2. It reads that protected-resource document, which names this origin as the authorization server, and then the authorization-server document (authorize, token and registration endpoints; PKCE S256; authorization-code + refresh-token grants).
  3. It registers itself (dynamic client registration, no secret), opens your browser on the studio's normal sign-in, and you click Authorize.
  4. It exchanges the code for an access token (7 days, rotates through its refresh token) and calls the tools as you, on your projects only.

First thing to do once connected: read the MCP resource shopprentice://skill (the authoring skill), then write_script → build until validation passes → get_view, get_cutlist, get_plans.

Signed-in extras

A. A token, for a client that cannot do the browser dance

Same one-week expiry as the OAuth token above; shown once.

B. Paired connector (device code)

Run python -m connector --server https://shopprentice.com on your machine. It prints a code; enter it here to pair. Then pick byo:you in the chat provider picker and your turns run your local agent CLI.

What the connector may do

Your paired devices

back to the studio