MCP
MCP tools
The Nomic MCP server turns each Nomic HTTP API operation into one tool, named after the operation. It adds three helper tools that start an agent and wait for it, a set of prompts, and two resources.
A client sees only the tools its API key can call. A key with the developer
scope sees the developer tools, and admin tools appear only for keys with admin
scopes whose owner is an organization admin. Each call still checks the key
owner's access, so a tool never returns a project or file its owner can't open.
To see exactly what a key can call, use get_current_api_key, or read the
nomic://catalog resource.
Like the HTTP API, these tools are experimental. Names and arguments can change between releases. Because the tools are generated from the API, a new API operation becomes a tool on the next release with no client changes.
How tools work
Arguments
A tool takes one object that combines the operation's path parameters, query
parameters, and JSON body fields. For example, get_artifact takes id and
artifactId, and launch_agent takes prompt, projectId, fileIds, and
the other body fields of POST /agents. Each tool's input
schema lists its arguments, and the API reference
describes them in full.
List tools take limit and cursor. When a result includes nextCursor, pass
it as cursor to get the next page.
IDs are UUIDs. Get them from list and search tools: search_files for file
IDs, list_projects for project IDs, list_workflows for workflow IDs.
Results and errors
A successful call returns the API's JSON response as structured content, with the same JSON as text for clients that ignore structured content.
A failed call returns an error result with the API's status and error code:
{
"status": 429,
"code": "rate_limited",
"message": "Rate limit exceeded",
"retryAfterSec": 12
}
code | What to do |
|---|---|
bad_request | Fix the arguments. issues lists the fields that failed validation. |
unauthorized | The key is invalid, revoked, or expired. Use a different key. |
forbidden | The key lacks the scope, or its owner lacks access. Retrying will not help. |
not_found | The resource doesn't exist, or the key owner can't see it. |
conflict | The resource is in the wrong state, for example an agent that is running. |
payment_required | A spend limit was reached. |
rate_limited | Wait retryAfterSec seconds, then retry. See Rate limits. |
Tool types
Each tool carries MCP annotations so clients can decide when to ask you for approval. The tables on this page use these types:
| Type | Meaning |
|---|---|
| Read | Reads data and changes nothing. |
| Write | Creates something or starts work. Calling it twice does it twice. |
| Update | Changes existing data. Calling it twice has the same effect as calling it once. |
| Destructive | Deletes or removes access. Review before approving. |
Scopes
The Scope column names the scope a key needs. Broad scopes include the
narrower ones under them: developer covers every developer:* scope, and
admin covers every admin:* scope. Keys created in the Developer Console with
the developer scope can call every developer tool.
Account
| Tool | What it does | Type | Scope |
|---|---|---|---|
get_current_api_key | Returns the key's owner, its effective scopes, and every tool it can call. | Read | None |
Any valid key can call get_current_api_key. Use it to check a key before
starting work.
Agents
Agents run in the background. Start one with run_agent (or launch_agent),
then read its answer with get_conversation and its outputs with
get_artifact.
| Tool | What it does | Type | Scope |
|---|---|---|---|
run_agent | Starts an agent and waits until it finishes, fails, or is stopped. Takes the same arguments as launch_agent. | Write | developer:agent |
followup_and_wait | Sends a follow-up to an agent and waits for that turn to finish. Takes the same arguments as followup_agent. | Write | developer:agent |
wait_for_agent | Waits for an agent that is already running. | Read | developer:agent |
launch_agent | Starts an agent and returns right away, without waiting. | Write | developer:agent |
followup_agent | Sends a follow-up prompt to a finished, stopped, or failed agent and returns right away. | Write | developer:agent |
list_agents | Lists your agents, optionally filtered by status or workflow. | Read | developer:agent |
get_agent | Returns an agent's status, source files, and artifacts. | Read | developer:agent |
get_conversation | Returns the conversation. Pass include: "steps" to add thinking and tool steps. | Read | developer:agent |
get_agent_usage | Returns token usage and cost by model for a run, including its sub-agents. | Read | developer:agent |
get_artifact | Returns the latest version of an artifact: a Markdown document or a table. | Read | developer:agent |
export_artifact | Exports a table as CSV or XLSX, or a drawing review as an annotated PDF. Returns a link valid for five minutes. | Read | developer:agent |
stop_agent | Asks a running agent to stop. | Update | developer:agent |
delete_agent | Deletes an agent and its messages. Artifacts it created are kept. | Destructive | developer:agent |
get_agent, get_conversation, and get_agent_usage also accept
admin:analytics:read, which lets an admin key read any agent in the
organization.
Start an agent
A simple agent takes a prompt, plus optional files, project, and capabilities:
{
"prompt": { "text": "Summarize the open items in the site visit report." },
"projectId": "0199a3f2-5b1c-7d40-9e2a-3c8f1a6b2d10",
"fileIds": ["0199a4c8-1f2e-7a33-8b5d-6e9c0d4f7a21"],
"capabilities": { "webSearch": true }
}
To run a workflow, find it with list_workflows (its query matches names and
descriptions), then pass workflowId. If the workflow has file inputs, pass
workflowInputs instead of prompt, mapping each input name from the
workflow's requestedFiles to a file ID, a list of file IDs, or null for an
optional input you leave empty. Editors can pass workflowVersionId to run a
version other than the released one.
Follow-ups can't attach new files. To work with new files, start a new agent.
What the wait tools return
run_agent, followup_and_wait, and wait_for_agent return:
{
"agentId": "0199b1e0-6c2d-7f18-a4e3-2b7d9c5e8f01",
"timedOut": false,
"agent": { "id": "0199b1e0-…", "status": "finished", "artifacts": [] }
}
agent is the same object get_agent returns. An agent is active while its
status is waiting, running, or awaiting_tool, and done once it is
finished, failed, or stopped.
A call waits up to 14 minutes. Pass timeoutMs to wait less. If the time runs
out, the result has timedOut: true and the latest status, and the agent keeps
running. Call wait_for_agent with agentId to keep waiting. Don't call
run_agent again, which would start a second agent.
You can open any agent in Nomic at
https://<your-domain>.nomic.ai/assistant/<agentId>.
Files
| Tool | What it does | Type | Scope |
|---|---|---|---|
search_files | Finds files you can read by name. Returns IDs to use in fileIds and workflowInputs. | Read | developer:files |
upload_file | Uploads a file of up to 15 MB, sent inline as base64. Optional path or parentId sets where it goes. | Write | developer:files |
get_file_status | Reports whether an uploaded file is processing, ready, or failed. | Read | developer:files |
PDFs and legacy Office files are processed after upload. Wait until
get_file_status reports ready before you pass the file to a workflow.
upload_file takes the file as an object:
{
"file": {
"filename": "site-visit.pdf",
"contentBase64": "JVBERi0xLjcK...",
"mimeType": "application/pdf"
},
"path": "Field/Site visits/site-visit.pdf"
}
path includes the file name and creates any missing folders. Pass parentId
instead to upload into an existing folder.
The client's model writes the base64 content into the call, so upload_file
suits small files such as notes or short reports. For drawing sets and other
large files, upload in the Nomic app or with
POST /api/v0/files/upload, which accepts files up
to 500 MB.
Workflows
| Tool | What it does | Type | Scope |
|---|---|---|---|
list_workflows | Lists workflows you can run. query matches names and descriptions. Each result lists its requestedFiles. | Read | developer:agent |
get_workflow | Returns a workflow and one version in full: instructions, input slots, linked artifacts. Latest by default. | Read | developer:agent |
list_workflow_versions | Lists a workflow's versions with run counts and cost, newest first. | Read | developer:agent |
create_workflow | Creates a private workflow with an unreleased first version. | Write | developer:workflows |
update_workflow | Writes a new candidate version. Fields you leave out are copied from baseVersionId, or the latest version. | Write | developer:workflows |
release_workflow_version | Makes a version the one launch_agent runs by default. Release an earlier version to roll back. | Update | developer:workflows |
get_workflow and list_workflow_versions need edit access to the workflow,
like opening it in the builder.
Author and improve a workflow
create_workflow and update_workflow never release. Each returns a
versionId; pass it to run_agent as workflowVersionId to test that version
while everyone else keeps running the released one. Only editors can run a
version other than the released one.
update_workflow edits the latest version in place only while it is unreleased
and no agent has run it. After a run, the version is frozen and the next update
writes a new version, so each run stays tied to the instructions it ran. To
drop a candidate, pass an earlier version as baseVersionId.
When get_workflow returns isShared: true, releasing changes what other
people run. Context files, tags, MCPs, and sharing are set in the builder, at
the builderPath each response returns.
Projects
| Tool | What it does | Type | Scope |
|---|---|---|---|
list_projects | Lists projects you can access. Pass search to filter by name, or membership: "mine" to list only projects you belong to. | Read | developer:projects:read |
get_project | Returns one project. | Read | developer:projects:read |
list_project_members | Lists a project's members and their roles. | Read | developer:projects:read |
create_project | Creates a project, with you as its first admin. | Write | developer:projects:create |
update_project | Changes a project's name, description, or project number. | Update | developer:projects:admin |
update_project_members | Adds, changes, or removes member roles in one batch. A role of null removes the member. | Destructive | developer:projects:admin |
Roles map to the app's names: admin is Admin, editor is Member, and
viewer is Read-only. Changing a project or its members also requires admin
access to that project. Organization admins can update any project.
Parse
| Tool | What it does | Type | Scope |
|---|---|---|---|
submit_parse | Starts a parse job for an uploaded file version. Returns a taskId. | Write | developer:parse |
get_parse_status | Returns pending, failed, or completed with a link to the parsed JSON, valid for one hour. | Read | developer:parse |
Parse works on uploaded files only, not files synced from an integration such as SharePoint or Google Drive. See Parse for the output format.
Codes
| Tool | What it does | Type | Scope |
|---|---|---|---|
search_codes | Searches building, fire, and other codes by jurisdiction, code type, and query. Returns adoption status. | Read | developer:agent |
See Code search for jurisdictions, code types, and the result format.
Budgets
| Tool | What it does | Type | Scope |
|---|---|---|---|
list_budgets | Lists the budgets you administer. Filter with scope or projectId. | Read | developer:budgets:read |
get_budget | Returns one budget. Pass organization as the ID for the organization budget. | Read | developer:budgets:read |
list_budget_members | Lists each member's own limit, the limit that applies to them, and their spend this window. | Read | developer:budgets:read |
set_budget_member_limits | Sets or clears per-user limits in one batch. A limitCents of null restores the budget default. | Update | developer:budgets:write |
Budget tools need admin access to the budget. Organization admins can reach the
organization budget and every project budget, and a project admin can reach that
project's budget. Member limits must be turned on for a budget before
set_budget_member_limits can change them.
Admin tools
These tools appear only for keys with admin scopes, and only while the key's owner is an organization admin.
Users
| Tool | What it does | Type | Scope |
|---|---|---|---|
list_users | Lists users in the organization. email filters by address. | Read | admin:users:read |
get_user | Returns one user, with counts of active API keys and sessions. | Read | admin:users:read |
disable_user | Disables a user and revokes all of their API keys. Takes an optional reason. | Destructive | admin:users:write |
enable_user | Re-enables a disabled user. Their revoked keys stay revoked. | Update | admin:users:write |
API keys
| Tool | What it does | Type | Scope |
|---|---|---|---|
list_api_keys | Lists API keys in the organization, with owner, scopes, and last use. | Read | admin:api-keys:read |
revoke_api_key | Revokes a key immediately and permanently. Takes an optional reason. | Destructive | admin:api-keys:write |
Audit logs
| Tool | What it does | Type | Scope |
|---|---|---|---|
list_audit_logs | Lists audit events. Filter with action and since (ISO 8601). | Read | admin:audit:read |
Integrations
| Tool | What it does | Type | Scope |
|---|---|---|---|
list_sharepoint_drives | Lists the drives under a SharePoint site, and whether Nomic syncs each one. | Read | admin:integrations:read |
connect_sharepoint_site | Starts syncing a SharePoint site's drives: all of them, or the driveIds given. | Update | admin:integrations:write |
Analytics
| Tool | What it does | Type | Scope |
|---|---|---|---|
list_daily_spend | Spend per UTC day, optionally split by user, project, workflow, or model. | Read | admin:analytics:read |
list_user_analytics | Usage, spend, spend cap, role, and last activity for each member. | Read | admin:analytics:read |
list_workflow_analytics | Runs, last run, and average spend for each workflow. | Read | admin:analytics:read |
list_project_analytics | Members, files, sessions, and spend for each project. | Read | admin:analytics:read |
list_usage_events | Individual spend events with token counts, for reconciling totals. | Read | admin:analytics:read |
list_org_agents | Agents run by every member of the organization. | Read | admin:analytics:read |
Analytics tools default to the last 30 days. See Analytics for the fields each one returns.
Prompts
Prompts are ready-made instructions that walk the client through a task. Most clients list them as slash commands. A prompt appears only when the key can call every tool it uses.
| Prompt | What it does | Arguments |
|---|---|---|
orchestrate-agent | Finds or uploads the files, runs an agent or workflow, then summarizes the answer and artifacts. | goal, optional workflowName |
inspect-agent | Summarizes an agent's status, last request, final answer, spend, and artifacts. | agentId |
author-workflow | Designs a workflow with you, creates it as a draft, and tests it on sample files. Asks before releasing. | task |
improve-workflow | Measures a workflow on test cases, changes one thing per version, compares versions, and asks before releasing the winner. | workflowId, optional problem |
search-codes | Answers a code-compliance question with search_codes and cites the returned sections. | question, optional jurisdiction, codeType |
review-org-usage | Reviews daily spend, top users, workflows, and failed or stopped agents. Admin keys only. | Optional window, such as 7d (default) or 30d |
manage-org-user | Looks up a user and, only if you ask and confirm, disables or enables them. Admin keys only. | email, optional action |
review-audit-logs | Summarizes recent audit events, calling out key revocations, disabled users, and authentication failures. Admin keys only. | Optional action, since |
Resources
| Resource | Contents |
|---|---|
nomic://catalog | Every tool the key can call, with its HTTP method and path, type, and required scopes, plus the helper tools. |
nomic://instance | The connected key's owner, effective scopes, and callable tools. The same data as get_current_api_key. |
Limits
| Limit | Value |
|---|---|
| Longest wait in one call | 14 minutes. Pass timeoutMs to wait less. |
Largest file for upload_file | 15 MB |
| Rate limits | Same as the HTTP API, per user. See Rate limits. |
Related
- Nomic MCP server: connect a client.
- MCP for IT and admins: roll-out, access control, and auditing.
- API reference: every operation's parameters and responses.