Loading...
Loading...
Numonic speaks the Model Context Protocol. Point any MCP-capable agent at one endpoint and it can search, organize, and export your creative assets — 72 tools across 13 domains, with provenance intact.
Endpoint: https://www.numonic.ai/mcp
Which credential each kind of client uses, and what each permission allows, is set out in MCP authentication.
Read this before you approve a connection or create a key. Grant only what the agent needs; you can revoke an API key or disconnect an OAuth connection at any time.
| Permission | Allows | OAuth connection | API key |
|---|---|---|---|
| read | View assets, collections and their details. | Yes | Always included |
| search | Search your library. | Yes | Optional |
| write | Add and update assets, tags and collections, and remove tags and annotations. | Yes | Optional |
| export | Export and publish assets and collections. | Yes | Optional |
| admin | Run pipelines and register webhooks. | Never granted | Optional |
write: Changes your library. An agent with write can edit or remove what is already there.export: Sends content out of Numonic. Published collections and exports can be opened by people outside your workspace.admin: Broadest permission. Use a dedicated key for it, not the key your everyday agent uses.Sign in and open Settings → Workspace → Connected Agents. Under Create a new key, give it a name your future self will recognise (for example, the agent it belongs to) and tick only the permissions the agent needs (see what you are granting). Read is always included; add Search for search tools, Write to add or change assets and collections, and Export to export or publish. Leave Admin off unless this key exists to run pipelines or register webhooks.
Copy the key when it is shown — it starts with napi_ and is displayed once. A key belongs to one workspace: everything the agent does lands there. Treat it like a password: keep it in a password manager or secrets store, not in a document, chat or repository.
A client that lets you set a server URL and request headers takes a block like this in its MCP server settings; field names vary by client. Replace the placeholder with your key. If your client can read the value from an environment variable or prompt you for it, use that instead of typing the key into the file, and never commit a file that contains it.
{
"mcpServers": {
"numonic": {
"url": "https://www.numonic.ai/mcp",
"headers": {
"Authorization": "Bearer YOUR_NUMONIC_API_KEY"
}
}
}
}Send the key in a header only — Authorization: Bearer napi_… or X-API-Key: napi_…. A key in the URL (?api_key=) is rejected. Client-specific file locations and SDK examples are on the MCP reference.
Restart or reload your client and ask it to list Numonic's tools. To check from a terminal instead, store the key in an environment variable for this shell session (the prompt hides what you paste and keeps it out of your shell history), then list the tools:
read -rs -p "Numonic API key: " NUMONIC_API_KEY
export NUMONIC_API_KEYcurl -s https://www.numonic.ai/mcp \
-H "Authorization: Bearer $NUMONIC_API_KEY" \
-H "Content-Type: application/json" \
-H "Accept: application/json, text/event-stream" \
-d '{"jsonrpc":"2.0","id":1,"method":"tools/list"}'The response should list 72 tools. Then make one read call:
curl -s https://www.numonic.ai/mcp \
-H "Authorization: Bearer $NUMONIC_API_KEY" \
-H "Content-Type: application/json" \
-H "Accept: application/json, text/event-stream" \
-d '{"jsonrpc":"2.0","id":2,"method":"tools/call",
"params":{"name":"ListCollections","arguments":{}}}'A 401 means the key is missing, mistyped, or revoked. A permission error means the key lacks the scope that tool needs — create a key with it.
In your client's connector or integration settings, add a custom MCP connector with this URL:
https://www.numonic.ai/mcpYou don't configure anything here. The client calls the endpoint, is told where Numonic's authorization details live (/.well-known/oauth-protected-resource/mcp), and registers itself with Numonic's authorization server.
You are sent to a Numonic consent page. Sign in, pick the workspace, and choose what the connection may do. The page offers read, search, write and export; check what each one allows first, and leave write and export unticked unless the agent needs them. Admin is never offered: it can only be held by an API key — see OAuth connection permissions.
Back in the client, ask it to list Numonic's tools and then to list your collections.
Generator returns a URL (fal, Replicate, Comfy Cloud, Midjourney): pass it to StoreAsset as asset_data_url with the prompt you used. Numonic fetches the file server-side. Store it promptly: Replicate URLs expire after an hour.
curl -s https://www.numonic.ai/mcp \
-H "Authorization: Bearer $NUMONIC_API_KEY" \
-H "Content-Type: application/json" \
-H "Accept: application/json, text/event-stream" \
-d '{"jsonrpc":"2.0","id":3,"method":"tools/call","params":{
"name":"StoreAsset","arguments":{
"tenant_id":"<your tenant id>",
"filename":"render.png","mime_type":"image/png",
"asset_data_url":"https://v3.fal.media/files/<...>.png",
"prompt_metadata":{"prompt_text":"<the prompt you sent>",
"parameters_used":{"generator":"fal","model":"fal-ai/flux/dev"}}}}}'Generator returns bytes (image APIs that send the file back instead of a link), or the file is larger than about 3 MB: small files can go inline as asset_data_base64, but MCP requests are capped at 4.5 MB. An agent that can run shell commands should upload the file itself, then reference it.
# 1. Ask for a signed upload URL (needs a key with the write scope)
curl -s "https://www.numonic.ai/api/v1/storage/signed-url/upload?filename=render.png&contentType=image/png" \
-H "Authorization: Bearer $NUMONIC_API_KEY" \
-H "X-Tenant-ID: <your tenant id>"
# -> {"signedUrl":"https://...","path":"<tenant id>/uploads/..."}
# 2. Upload the bytes directly to storage (no 4.5 MB limit)
curl -s -X PUT "<signedUrl>" -H "Content-Type: image/png" \
--data-binary @render.png
# 3. Call StoreAsset with "asset_storage_ref":{"storagePath":"<path>"}
# and your prompt_metadata, exactly like the URL example above.Record which generator made the image as plain strings in prompt_metadata.parameters_used (generator, model). Only send what you actually called. Assets stored this way are counted as agent-generated.
Next: browse the full tool reference.