MCP server
Connect an MCP client
Add Voxa's MCP server to your assistant, sign in once in the browser, and check the connection with a first prompt.
The server URL is the same everywhere:
https://voxa.abhinavyadav.in/mcp
Each client below connects with OAuth: it opens a Voxa page where you sign in and choose Allow. If you belong to more than one workspace, pick the one to connect on that page.
Claude Code
claude mcp add --transport http voxa https://voxa.abhinavyadav.in/mcp
Then run /mcp inside Claude Code, pick voxa and choose Authenticate. Your browser opens the Voxa consent page.
To use an API key instead of signing in:
claude mcp add --transport http voxa https://voxa.abhinavyadav.in/mcp \
--header "Authorization: Bearer $VOXA_API_KEY"
Claude Desktop and claude.ai
- Open Settings → Connectors and choose Add custom connector.
- Name it
Voxaand pastehttps://voxa.abhinavyadav.in/mcpas the URL. - Choose Connect. Sign in to Voxa in the window that opens and choose Allow.
Custom connectors sign in with OAuth only; they can’t send an API key.
Cursor
Add Voxa to ~/.cursor/mcp.json (all projects) or .cursor/mcp.json (one project):
{
"mcpServers": {
"voxa": {
"url": "https://voxa.abhinavyadav.in/mcp"
}
}
}
Open Cursor Settings → MCP. Voxa shows a Login button the first time; it opens the consent page.
With an API key instead, add "headers": { "Authorization": "Bearer vx_your_key" } next to url.
VS Code (GitHub Copilot)
Add a .vscode/mcp.json to your project:
{
"servers": {
"voxa": {
"type": "http",
"url": "https://voxa.abhinavyadav.in/mcp"
}
}
}
Start the server from the file (or MCP: List Servers in the command palette). VS Code asks you to sign in to Voxa in the browser.
Windsurf
Add Voxa to ~/.codeium/windsurf/mcp_config.json:
{
"mcpServers": {
"voxa": {
"serverUrl": "https://voxa.abhinavyadav.in/mcp"
}
}
}
Any other client
Point it at https://voxa.abhinavyadav.in/mcp with the Streamable HTTP transport. Clients that follow the MCP authorization spec find everything on their own from the 401 response:
| Endpoint | URL |
|---|---|
| Protected resource metadata | https://voxa.abhinavyadav.in/.well-known/oauth-protected-resource/mcp |
| Authorization server metadata | https://voxa.abhinavyadav.in/.well-known/oauth-authorization-server |
| Authorization (consent page) | https://voxa.abhinavyadav.in/oauth/authorize |
| Token | https://voxa.abhinavyadav.in/api/oauth/token |
| Client registration | https://voxa.abhinavyadav.in/api/oauth/register |
| Revocation | https://voxa.abhinavyadav.in/api/oauth/revoke |
Voxa supports the authorization code grant with PKCE (S256 only), refresh tokens, and open dynamic client registration. Redirect URIs must be https, http on localhost/127.0.0.1, or an app’s own scheme (for example cursor://).
A client that can’t register itself (some connector forms ask for a client ID up front) can register once by hand:
curl -X POST https://voxa.abhinavyadav.in/api/oauth/register \
-H "Content-Type: application/json" \
-d '{"client_name": "My agent", "redirect_uris": ["https://my-agent.example.com/oauth/callback"],
"token_endpoint_auth_method": "client_secret_post"}'
The response holds the client_id (and a client_secret, shown once) to paste into the form.
To try the server by hand, run the MCP Inspector and connect it to the URL above:
npx @modelcontextprotocol/inspector
Check the connection
Ask your assistant:
List my Voxa agents and tell me which voice and model each one uses.
It calls list_agents and answers from your workspace. If it says it isn’t signed in, run the client’s sign-in step again; if the token was revoked under Settings → Connected apps, connect it again.
Troubleshooting
| What you see | What to do |
|---|---|
| The browser never opens | The client may not support OAuth. Use an API key header, or another client. |
| “Can’t connect this app” on the consent page | The app’s registration is missing or its return address doesn’t match. Remove the server in the client and add it again. |
| “choose an active workspace first” | Your workspace is still in onboarding. Finish KYC, then connect. |
401 after it worked before | The connection was disconnected, or you left the workspace. Connect again. |
HTTP 403: your role cannot do this from a tool | Your role can’t make that change (viewers only read). Ask an owner or admin. |