How it works
Your MCP client connects to the Vidoc API at/mcp with Streamable HTTP. It sends a user API key in the Authorization: Bearer <key> header. The server checks your project access and role on each request.
- Each connection has access to one project: the project of the key. For another project, create another key and add a server with a different name.
- The server lists only the tools that your role permits.
- Findings include validated true positives. False positives and findings that still need validation do not appear. Experiment pull requests do not appear.
- The agent changes files in your local repository through its editor. The MCP server can change only the status of an issue in Vidoc.
Set up the connection
1. Create a user API key
- Open app.vidoc.dev or your custom deployment URL.
- Select the project that has the repositories you want to read.
- Open Project switcher > API keys and select Create new key.
- Enter a name, such as
MCP local development, and select an expiry. - Create and copy the key. Refer to API Keys for key management.
403 MCP accepts user tokens only. A read_only member cannot create a key. The roles developer, security_engineer, and admin can create keys and change issue status.
The default expiry is 1 month. For a connection that you use over a longer period, select 6 months or 1 year and plan to replace the key before it expires. The
whoami tool reports the expiry date.2. Select the API URL
SetVIDOC_API_URL without a trailing slash or /v1. Use the API address, not the web app address.
- Vidoc Cloud
- Self-hosted
${VIDOC_API_URL}/mcp. It does not include /v1.
Self-hosted: your operators must enable MCP on the API with
MCP_ENABLED=true. The flag is off by default. If it is off, POST /mcp returns 404. Ask your operators to check the flag and the route in the supplied release runbook.3. Configure your client
- Claude Code
- Cursor
- MCP Inspector
For one local connection, run this command from your repository:This command stores the key in your local Claude Code configuration. To share the configuration with your team, use environment variables in Start Claude Code from the shell where you exported both variables. Run
.mcp.json at the root of the repository instead:/mcp in Claude Code to check the connection. Approve the project server when Claude Code asks.Refer to the Claude Code MCP documentation for client configuration.4. Check the connection
Ask your agent:5. Read or fix an issue
Open the repository in your client and ask:- Call
whoamito check the project. - Call
list_codebases. Match the local Git remote with thescmRepoSlugorurlof a repository and get itscodebaseId. - Call
list_issueswith thatcodebaseId. The list has the most severe issues first. - Call
get_issuefor the finding details orget_fix_promptfor a fix prompt. - Change the local code and check the fix. Then call
update_issue_statuswithclosed.
codebaseId with list_codebases, then calls get_pull_request_issues with pullRequest: "#412". If you do not know the number, ask it to search with list_pull_requests first.
Available tools
The read tools need
issue:view. The status tool needs issue:update_status and is hidden from a read_only connection.
Filters and result fields
list_issuesuses the default branch when you omitbranch. WithoutcodebaseId, it reads the default branches of all project repositories.- The issue lists default to
status: "open". They also acceptignored,fixed,closed, andall. Theclosedfilter includes findings that a scan markedfixed. list_issues,list_pull_requests, andget_pull_request_issuesreturn 20 rows by default and at most 50 rows. UsenextOffsetas the nextoffsetuntil it isnull.list_codebasesandlist_branchesreturn all their rows.hiddenByPolicyreports findings hidden by the triage policy, such as duplicates or deferred findings. PasscodebaseIdto get the triaged list of one repository. In a project with more than 50 triaged branches, a list withoutcodebaseIdreturns the raw list.- The tool fields
line,rangeStart, andrangeEndcount from zero. Add 1 for editor line numbers. Line numbers inside a fix prompt already count from 1. - If
snippetTruncatedistrue,get_issuecut the source snippet. Read the local file for more context.
Status changes
update_issue_status records your user as the author of the change. It can change only a finding that the connection can read.
Use closed after you fix the code. The tool does not accept fixed: a scan sets that status when it confirms that the finding is gone.
To ignore a finding, provide a reason of at least 5 characters. The reason starts a learning that affects how later scans judge similar code. The tool tells the agent to get your approval before it ignores a finding.
If the learning cannot start, the tool can report an error after the status has changed. Read the issue again before you retry an ignored status change.
Troubleshooting
Related pages
API Keys
Create and replace user API keys.
Findings
Read and manage findings in the web app.
API Authentication
Configure REST API access.
CLI Scanning
Scan code from your terminal.

