Repository navigation
feat(server): connect claude.ai and other remote MCP clients to a CLI-run server - #65
Merged
Merged
Conversation
…-run server The server's MCP OAuth sent the owner to vana://mcp-authorization, a Vana Desktop link, so adding a CLI-run server as a claude.ai connector dead-ended on any machine without Desktop. The server process now serves its own approval page on 127.0.0.1 and uses it as the approval URL: it shows who is asking (Claude, from the redirect), lists the owner's scopes ticked, and approves the chosen ones (or denies back to the client with access_denied) through the server's owner-only API with the token only that process holds. Host-checked against DNS rebinding, one-time form token, no framing. `vana server status` shows the MCP URL to paste into claude.ai (<public URL>/mcp). Claude-Session: https://claude.ai/code/session_01Fcv6uEy4zcXaigzDNxeW3j
github-actions Bot
pushed a commit
that referenced
this pull request
Sep 26, 2026
## [0.35.0](v0.34.0...v0.35.0) (2026-09-26) ### Features * **server:** connect claude.ai and other remote MCP clients to a CLI-run server ([#65](#65)) ([d6651f2](d6651f2))
Contributor
|
🎉 This PR is included in version 0.35.0 🎉 The release is available on GitHub release Your semantic-release bot 📦🚀 |
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
A Personal Server already speaks remote MCP with OAuth at
<public URL>/mcp, which is what claude.ai's custom connectors need. For a servervana server startruns, the OAuth approval step pointed atvana://mcp-authorization, a Vana Desktop link, so the flow dead-ended without Desktop.What changes
entry.mjs) serves an approval page on127.0.0.1(random port) and passes it asmcpOAuthApprovalUrl. New runtime filemcp-approval.mjs, shipped with the runtime and asserted in the pack and SEA checks.GET /v1/mcp/oauth/authorizations/:id,GET /v1/data), names the requester from its redirect ("Claude" for claude.ai), lists every scope ticked, and on Approve callsPOST .../approve {scopes}and 303s the browser to the client's redirect. Deny 303s back witherror=access_deniedand the state. Styled like Account (the server 1.25 tokens and logotype), light and dark.frame-ancestors 'none'. The owner token never leaves the server process.vana server statusshowsMCP URL: <public URL>/mcpto paste into claude.ai.Verified
pnpm validate516 tests (new: render, approve, deny, forged and reused token, wrong Host, requester name)./mcp/oauth/authorizenow redirects tohttp://127.0.0.1:<port>/mcp?mcp_authorization=..., and the page renders "Allow Claude to read your data" with the account's scopes. Then, end to end in claude.ai (Volod's account, test Vana account on mainnet): Customize, Connectors, Add custom connector with the MCP URL; claude.ai detected OAuth and dynamic client registration on its own; Connect opened the local approval page; Approve returned to claude.ai with "Connected to Vana (test)" and the server's 7 tools listed; a new chat asking "what are my GitHub repos about?" called List granted scopes and Read scope (github.repositories) and answered with the account's real repos.https://claude.ai/code/session_01Fcv6uEy4zcXaigzDNxeW3j