Skip to main content

Risotto MCP Server

Risotto exposes a Model Context Protocol server so MCP-compatible clients (Claude Desktop, Cursor, ChatGPT, and custom agents) can call into your Risotto workspace. The server has 124 tools. You can work with tickets, knowledge, users, departments, runbooks, automation tools, access rules, campaigns, and organization settings. See Available tools for the full list. Clients authenticate with OAuth 2.1. Your client runs a standard browser-based authorization flow, and each user signs in with their own Risotto identity, so tool calls are attributed and audited per person. Claude Desktop, Claude Code, Cursor, ChatGPT, the MCP Inspector, and any client that ships a built-in OAuth UI connect this way. Risotto API keys are not an authentication method for the MCP server.
OAuth clients self-register with Risotto the first time they connect — there is no “create OAuth client” step in the dashboard. You only need the server URL.

Prerequisites

  • A Risotto account in the organization. Every organization role can connect. Your role limits the scopes that you can grant (see Scopes and organization roles).
  • An MCP-compatible client. OAuth requires a client that supports OAuth 2.1 + Dynamic Client Registration (Claude Desktop, recent Cursor, MCP Inspector, or any spec-compliant client).

Find your MCP server URL

Each Risotto organization has its own MCP server URL of the form:
Copy your organization’s specific URL from Settings → Developers → Risotto MCP server in the dashboard.

Connect with OAuth

Org Admins and Managers can grant every scope. A Member can grant only the Member scopes. See Scopes and organization roles.
1

Add the MCP server to your client

Most MCP clients only need the server URL — they handle registration and the consent flow automatically.
Edit your Claude Desktop config file:
  • macOS: ~/Library/Application Support/Claude/claude_desktop_config.json
  • Windows: %APPDATA%\Claude\claude_desktop_config.json
Replace YOUR_MCP_SERVER_URL with the URL from your dashboard. No client ID, client secret, or token URL is needed — Claude Desktop discovers everything from the server.Restart Claude Desktop after saving.
2

Sign in and grant scopes

The first time the client connects, a browser tab opens to a Risotto consent screen. Sign in with the same account you use for the dashboard and review the scopes the client is requesting. Clear the checkbox next to a scope to leave it out of the grant, then click Allow.The scopes you approve at this screen bound that specific client’s access. They don’t change your overall account permissions. The screen lists only the requested scopes that your organization role can hold. Each user makes this choice for their own connection. An admin cannot limit which scopes the users in the organization grant.When an admin adds Risotto as a connector for the whole organization (for example, in Claude’s organization settings), the consent screen does not open. Each user sees it the first time they connect to Risotto from their own client.
3

Use the tools

Risotto’s tools now appear in the client’s tool picker. The access token issued at consent is refreshed automatically; you won’t be re-prompted unless you revoke the client or the refresh window lapses.

Available scopes

OAuth clients request scopes at consent time. A scope grants the tools listed under it in Available tools.
Follow least privilege. For a read-only assistant, approve tickets:read, knowledge:read, users:read, departments:read, runbooks:read, and tools:read. Add write or execute scopes only when a workflow needs them.

Scopes and organization roles

Your organization role limits the scopes that a client can hold:
  • Org Admin and Org Manager can hold every scope.
  • Member can hold tickets:read, tickets:write, knowledge:read, users:read, departments:read, runbooks:read, categories:read, applications:read, tools:read, and tools:execute. A Member can run and test only the tools of the departments that they supervise.
At consent, a Member sees only the requested scopes in this list. If none of the requested scopes is in the list, the client gets access_denied. Risotto checks the role on every request. When an admin changes your role, your tokens get the scopes of the new role within 5 minutes. A user who leaves the organization gets 403. A Member also has these limits:
  • A Member can act only as themselves. Risotto refuses a create_ticket for another requestor (“You can create tickets only for yourself”), an add_comment as another author (“You can comment only as yourself”), and a search_knowledge or check_document_index_status on behalf of another user (“You can search only with your own access”).
  • search_knowledge with a dept_id works only for a department where the Member can read tickets. Without dept_id, it searches only documents shared with the whole organization.
  • list_runbooks and get_runbook return the org-wide runbooks and the runbooks of the Member’s departments.
Ticket access via MCP respects the authenticated user’s department membership and role, the same as the dashboard and chat — a tickets:read scope doesn’t grant visibility into tickets outside the departments that user belongs to.

Manage authorized clients

From Settings → Developers → Risotto MCP server in the dashboard you can:
  • See every OAuth client that has registered against your organization, including the IP it was registered from and when it last made a request.
  • Revoke a client — invalidates all of its tokens immediately. The client will be prompted to sign in again on its next request.
Revoking an OAuth client only affects that one client. Other authorized clients keep working.

Available tools

The server registers 124 tools. Each tool needs one scope. tools/list returns only the tools whose scope your credential holds, with their input schemas. For example, a Member sees only the tools of the Member scopes, and an API key with narrow scopes sees only the tools of those scopes. Risotto also checks the scope when you call a tool, so a call to a tool outside your granted scopes fails with a missing-scope error. Tool names below are the values you pass in tools/call. The dashboard Assistant is built on the same tools. Where a ticket tool takes a ticket_id, you can pass the Risotto key (for example IT-123) or the key of the synced ticket in your ticketing system (for example the Jira key ENG-123). Risotto tries the Risotto key first, then the synced key. If more than one ticket has the same synced key, Risotto uses the newest ticket. Ticket results include external_ticket_id and external_ticket_url. Both are null when the ticket is not synced. list_tickets has no filter for the synced key, but its search argument matches the synced key. Ticket results also include priority, as { value, is_suggested } or null. value is low, medium, high, or urgent. is_suggested is true when the value is the priority that the AI suggested, and false when a person set it. The ticket tools cannot change the priority. See Ticket priority. To find tickets about a topic, pass search to list_tickets. The search is not case-sensitive. It matches the ticket title, public comments, the requestor’s email, the assignee’s name, the name of the Slack channel where the ticket started, the synced key, and the ticket number (123 or IT-123). Risotto combines search with the other filters. The dashboard Search tickets box matches the same fields.
Grant tools:execute only to a user who may approve every tool it can reach. execute_tool runs the tool at once, also when the tool’s approval setting is Required in the dashboard. Risotto records the call against the user who authorized the OAuth client.
Six tools collect secrets on a secure card in the dashboard Assistant: request_tool_credentials, request_custom_api_credentials, request_external_mcp_credentials, request_external_mcp_authorization, request_okta_credentials, and request_vault_credential. From an external MCP client they only report the current state. Enter the secret in the dashboard instead. ingest_attached_file reads a file uploaded in the dashboard Assistant and has no use from an external client.
The set of tools grows as Risotto adds capabilities. Call tools/list against your endpoint to see the current list of tools that your scopes allow, with input schemas.

Troubleshooting

The bearer token is missing, malformed, expired, or revoked.
  • The client should refresh its token automatically. If it doesn’t, remove and re-add the MCP server in the client to trigger a fresh consent flow.
  • If you configured the server with a Risotto API key instead of signing in, the response says so. Remove the key from the client’s configuration and reconnect; the client prompts you to sign in with OAuth.
  • The WWW-Authenticate response header points to the OAuth discovery document — most clients use this automatically to recover. If you’re building a custom client, follow that pointer.
You are no longer in the organization, or none of the requested scopes is one that your role can hold.
  • A user who is not in the organization gets 403 with insufficient_scope (“Only org admins, managers, and members can use Risotto MCP.”).
  • At consent, a Member whose client requests only scopes outside the Member scopes goes back to the client with access_denied.
  • A 503 with Retry-After: 30 means that Risotto could not read your role. Try again.
Scope failures come back as a successful JSON-RPC response whose result.isError is true, with a message naming the missing scope (for example, tickets:read).Revoke the client in the dashboard and reconnect — the consent screen lets you approve the additional scope. A Member cannot approve a scope outside the Member scopes. Ask an Org Admin for the Admin or Manager role.
You’ve hit Risotto’s rate limit. /mcp requests are throttled per credential at 1,000 requests per hour by default, and OAuth token issuance is throttled per client.The response includes Retry-After and X-RateLimit-* headers showing the reset window. Back off until the window resets, or contact support if you consistently need higher limits.
  • Restart the client after editing its config file — most clients only read MCP config at startup.
  • Run the curl snippet above to confirm the endpoint is reachable.
  • tools/list returns only the tools that the credential’s scopes allow. If a tool you expect is missing, check the scopes you granted, and for OAuth, check your organization role. See Scopes and organization roles.