The Verisoul MCP server connects an AI client to your Verisoul data. Claude, Cursor, VS Code, and anything else that speaks the Model Context Protocol can work with your accounts, sessions, rules, lists and dashboards directly.
There are two ways in, and both reach exactly what you reach in the dashboard:
The endpoint is https://dashboard.verisoul.ai/api/mcp. For Sandbox, use https://dashboard.sandbox.verisoul.ai/api/mcp.
Signing in from your client
Nothing to create or paste. Point the client at the endpoint, and it opens a browser tab where you sign in to Verisoul and approve the connection. The approval screen names the client asking and, if you belong to more than one organization, asks which one this connection is for.
Then run /mcp inside Claude Code, choose verisoul, and sign in when the browser opens. Open Settings → Connectors → Add custom connector, enter https://dashboard.verisoul.ai/api/mcp, and sign in when prompted. A connector added on the web appears in Claude Desktop as well; they share the account.
Open Settings → Tools & MCP → Add and give it the URL only, with no headers:Cursor shows Needs login next to the server; choose it to sign in. Add the server to your settings.json and start it. VS Code opens a sign-in prompt the first time.
What the client gets is your access: the organization you chose, the projects you reach, and the permissions your role gives you there. Change your role and the connection follows within seconds. Leave the organization and it stops.
To work with a different organization, disconnect the server in the client and connect again. The approval screen asks which organization each time.
You can end a connection from the client at any time. Signing out of Verisoul does not affect it, and it lasts until you disconnect or an Admin removes you.
Keys, for clients that run on their own
A key reaches exactly what you reach. It is created from your own access, so a client holding it can do what you can do in the dashboard, and that is its limit.
Keys are managed from Settings → MCP access. Any member can create one.
Creating a key
Open Settings → MCP access
The list shows every key you have created, the role it holds, the projects it reaches, and when it was last used. Admins see every key in the organization; everyone else sees their own.
Name it after the client that will hold it
The name appears in this list and in the audit trail. Fraud ops agent or Nightly export script will mean something to you in six months. My key will not.
Choose when it expires
30 days, 90 days, one year, or does not expire. An expired key stops working on its own, which is the simplest way to limit a credential you need for a while.
Decide what it can reach
The same as your access gives the key everything you have today. This suits a client that works alongside you.Only certain projects narrows it. Pick the projects and the role for each, which is useful when a script reads one project and you would rather keep the rest out of its hands.In both cases the key stays inside your own access.
Copy the secret
The secret is shown once, at creation, and cannot be retrieved afterwards. Copy it into your client’s configuration straight away. A client that loses it needs a new key.
Keep the key secret
Never share an MCP key directly. Do not paste it into a chat, a ticket, a shared document, a screenshot, or source code you commit.A key is a live credential. It carries your access and needs no sign-in, so anyone holding it can read and change whatever you can, and the audit trail will show your key as the actor.Give it to your MCP client through a secrets manager or an environment variable. If a key does get out, revoke it from this list and create another. Revoking takes effect immediately.
Connecting a client with a key
Send the key as a bearer token against the MCP endpoint.
Keep the key in an environment variable, as shown above. Configuration files get synced between machines and committed to repositories.
What a connection can reach
Two things decide what a call is allowed to do, and both have to agree:
The limit can only narrow. Choosing Only certain projects on a key takes projects away from what it reaches, and everything offered there is already within your own access.
The client’s first call should be access_context_get, which returns the permissions and the project IDs the connection reaches. Every project-scoped tool needs a project ID from that list. A project outside its reach comes back as not found, which is the same answer an unknown project ID gets, so a client has no way to enumerate the rest.
Around 88 tools exist in total. The server offers each client the ones its connection can use, so a client that sees fewer tools than a colleague’s has a narrower key, a narrower role, or both.
Limits
Some tools start work that runs for a while: analytics queries, agent runs, signed-URL query results, and exports. Each family has a ceiling on how many can be in flight at once, so one runaway client cannot crowd out the rest of your organization.
A connection is one person’s sign-in or one key. A client that fans out across several projects gets five runs at once, not one.
When a ceiling is reached the tool answers RUN_LIMIT_REACHED with retry_after_seconds, and the right response is to wait and poll rather than resubmit. Short bursts of ordinary calls are bounded separately and answer RATE_LIMITED. Operations that spend money, such as email deep research and agent runs, also draw on a monthly quota for the organization.
Call usage_get at any time for the live ceilings, the quota that remains, and what is currently in flight.
Every call is recorded
Each tool call and resource read is written to your organization’s audit trail with who made it, which tool, which project, whether it was allowed, and how long it took. A sign-in is recorded as the person; a key is recorded as the key, under the name you gave it.
Your client can read the trail with the audit_events_list tool, which is the quickest way to answer what an agent actually did.
Keys follow your access
A key holds a role the same way a person does, and it is tied to the access you had when you created it.
Reduce or remove your access and every key you created is retired at the same moment, and stops working immediately. That covers a change to your project grants, a change to your organization role, and leaving the organization.
For an integration that has to keep running through changes to your own access, have it created by someone who will keep that access. A shared service account is the usual answer for a long-lived integration.
Managing keys
The list shows each key’s state:
Expired and revoked keys stay in the list, so it also answers what has ever been able to reach your account.
Revoking a key stops it at once and clears the roles behind it. It cannot be undone: a client that still needs access needs a new key. You can revoke your own keys, and an Admin can revoke anyone’s.
Revoking is worth doing even for a key that already expired. It clears the roles the key still holds, which matters when you are trying to delete a role.
Sandbox and Production are separate
A connection reaches one environment. A key is created in one environment and works only there, and a sign-in against the Sandbox endpoint reaches Sandbox data only.
This follows the same rule as project access: Sandbox projects and Production projects are different projects holding different data. If your client needs both, connect it to each endpoint separately.
Troubleshooting
The client connects but few tools appear
The connection reaches very little. Call access_context_get to see what it holds. The usual causes are a key narrowed to projects your access has since dropped, or an organization role with zero project grants behind it.
For a key, check it is still active in Settings → MCP access. A key is retired automatically when the access of the person who created it is reduced or removed, and it shows as revoked here.For a sign-in, disconnect the server in the client and connect again. If sign-in completes but calls are still refused, you may no longer hold a role in that organization; ask an Admin.
The client says it cannot register, or sign-in never opens a browser
The client is older than the current MCP authorization standard. Update it, or use a key instead.
I belong to several organizations and the client connected to the wrong one
The approval screen at sign-in asks which organization to use. Disconnect the server in the client and connect again to choose another.
The client reports the project cannot be found
The project sits outside what the connection can reach. Use a project ID from access_context_get.
A tool answers RUN_LIMIT_REACHED
That family has as many runs in flight as the ceiling allows, for you or for the organization. Wait retry_after_seconds and poll the run you already started rather than starting another. usage_get shows what is in flight.
Roles are still being switched on for your organization, so there is nothing yet to build a key from. Contact support@verisoul.ai. The form says I reach no project
You hold an organization role with zero project grants. Ask an Admin to grant the projects you need, then create the key.
Revoke the key and create another. The secret is shown once at creation and cannot be retrieved.
A key still appears after I revoked it
That is intended. Revoked keys stay in the list as the record of what existed and what it could reach. They are inert.
Need Help?
If you have any questions about MCP access, please contact our support team at support@verisoul.ai.