Endpoint:
https://mcp.enokilabs.ai/mcp (streamable HTTP).Two ways to connect
- Sign in. Claude Code, Codex, VS Code, Claude Desktop and claude.ai connect by signing in: Enoki opens in your browser, you check what the app asks to do, untick what it doesn’t need, and allow it. Approving takes a workspace owner or admin, and the connection then shows under Settings → Connected apps, where you can change or end it. Allow only a sign-in you just started yourself; if you didn’t, click Deny.
- An API key. Every client can send a workspace API key instead, and Cursor
and other clients that can’t sign in need one. Give it the
readandwritescopes, plustest:runif your agent should trigger assessments. See API keys & scopes for how to mint one (workspace admins only). Keys look likeegk_…and are shown once.
Connect your client
Pick your client:- Claude Code
- Codex
- Cursor
- VS Code
- Other clients
- Claude Desktop / claude.ai
One command. Then run Verify with
--scope user makes the server available in every project, not
just the current one:/mcp in a session and authenticate enoki. Enoki opens in your
browser and says your answer goes to An app on this computer: check what
Claude Code asks to do, untick anything it shouldn’t have, and click Allow.To connect with an API key instead, send it as a header:claude mcp list (or /mcp inside a session). The tools appear as
mcp__enoki__get_setup_guide, mcp__enoki__create_target, and so on.Connected apps
Workspace owners and admins see every app connected to the workspace under Settings → Connected apps: what it may do, who connected it and when, and when it was last used. Change what an app may do there, which applies from its next request, or disconnect it, which refuses its next request. An app always getsread. When it connects, write and test:run start ticked
if the app asks for them, and it keeps whichever stay ticked. A connection ends
by itself after 30 days without use, and 90 days after it was approved at the
latest; the app then asks you to sign in again. It also ends when the person who
approved it leaves the workspace or stops being an owner or admin.
Register your first target
A target is one of your agent endpoints, registered so Enoki can test it. Your agent builds the config from your endpoint’s own API docs; start withget_setup_guide, which ships the full field reference and worked examples.
1
Read the setup guide
Call
get_setup_guide. It returns the config field reference plus the
semantics the schema can’t express (dot-paths, request-body templating,
streaming modes, session capture) and worked examples for HTTP, SSE, and
WebSocket endpoints.2
Check for duplicates
Call
list_targets first. Creates aren’t deduplicated, so a matching name
and endpoint_host in the same environment is the same target; reuse its
model_id rather than making a second. If only the name or only the host
matches, confirm before creating.3
Create the target
Call
create_target with your config. It’s atomic prove-then-persist:
Enoki fires one live probe and saves the target only if it succeeds. On failure
it returns a category (invalid_url, unreachable, auth_failed,
parse_error, no_reply, not_an_endpoint, unknown) and saves nothing, so fix and retry (see
Troubleshooting).
A target’s connection has no update or delete over MCP; change it in the
Enoki app.Only have a chat page? Pass the
url of a page of yours instead of a
config. A headless browser finds the agent call behind it and returns a
discovery_token; poll get_target_discovery, then call
create_target with the token to confirm and save. Any session the page
sets up stays on the server.Agent needs a key?
create_target asks for no keys, tokens or passwords.
Add an agent that needs one in the Enoki app: open
app.enokilabs.ai/inventory and choose
Add integration. The app stores the key encrypted (OAuth client
credentials included, and the token is re-minted before it expires). Your
MCP client then finds the agent with list_targets and runs it with
trigger_assessment. From CI, the REST API’s POST /api/v1/model also
takes the key (see the API reference).4
Tell Enoki what the agent is for
Read the target’s profile with
get_target_profile and change it with
update_target_profile, which also creates it when the target has none
yet. Say what each type of user may see (user_access), which user the test
account is (test_account) and which data is public (public_data). Only an
answer you wrote or confirmed can rule a finding out, so data your test user
may see is not reported as a leak. If auto-discovery has run on the target,
what it found is labelled as its own until you confirm it with
confirm_target_profile. Every text value comes back fenced as untrusted
data; send exactly the text between the fence tags when you change or
confirm it.5
Run an assessment
With the
model_id from create_target, call trigger_assessment, poll
get_assessment_status, then read results with list_findings and
get_finding. See the MCP tool reference.Scoped, change-relevant runs
A full assessment covers the whole security taxonomy. To gate a frequent deploy on something faster, focus the run on the categories a change actually touches: list the categories, pick the relevant subset, pass those keys to the trigger. Listing the categories is part of the platform plan. On a trial workspace the listing answers 403 with codetaxonomy_not_included, and a trigger that
passes categories answers 403 with code trial_focus_not_included, so run
the full assessment instead.
1
List the categories
MCP: call
list_categories. REST: GET /api/v1/category (scope
read). Each entry carries a key, a display_name, and a description.
The description is what makes an automated choice viable, so hand your agent
the whole list rather than a name-only summary. The response is static
platform metadata and is cacheable for an hour.2
Trigger with the subset
Pass the chosen keys as
categories to trigger_assessment (MCP) or
POST /api/v1/run (REST), then poll as usual.What’s next
What we test for
The coverage summary behind the category catalogue.
MCP tool reference
Every tool, its inputs and outputs, and the scope each requires.
Troubleshooting
Probe error categories, auth failures (401/403), and rate limits.