MCP Reference Navigationtap to expand

Developer Documentation · Reference

MCP Server Reference

Connect AI agents to your digital asset library via Model Context Protocol. 64 tools across 13 domains, 5 resources, and 5 guided prompts — ready for Claude Desktop, Claude Code, Cursor, and custom agents built on the MCP SDKs. Every MCP tool has a REST equivalent in the REST API Reference.

Tools
64
Resources
5
Prompts
5
Transport
HTTP / JSON-RPC 2.0
Endpoint: POST https://<project>.supabase.co/functions/v1/mcp-server

Getting Started

  1. 1

    Create an API key

    In the Numonic dashboard, go to Settings → API Keys and create a new key. Keys are available on all tiers, including free.

    Your key looks like napi_a1b2c3d4e5f6… — store it securely; it won't be shown again.

  2. 2

    Connect your MCP client

    The Numonic MCP server accepts connections over Streamable HTTP (JSON-RPC 2.0 over HTTP POST). See Client Configuration for copy-paste configs for Claude Desktop, Claude Code, and Cursor.

  3. 3

    Test the connection

    Send an initialize request to verify everything works:

    curl -X POST https://<project>.supabase.co/functions/v1/mcp-server \
      -H "X-API-Key: napi_your_key_here" \
      -H "Content-Type: application/json" \
      -d '{
        "jsonrpc": "2.0",
        "method": "initialize",
        "params": { "protocolVersion": "2025-03-26" },
        "id": 1
      }'

    A successful response returns the server capabilities. Then list tools with {"method":"tools/list"}.

Client Configuration

Copy-paste configuration for popular MCP clients. Restart the client after saving.

Claude Desktop

Add to ~/Library/Application Support/Claude/claude_desktop_config.json (macOS) or %APPDATA%\Claude\claude_desktop_config.json (Windows). Restart Claude Desktop after saving.

{
  "mcpServers": {
    "numonic": {
      "url": "https://<project>.supabase.co/functions/v1/mcp-server",
      "headers": {
        "Authorization": "Bearer napi_your_key_here"
      }
    }
  }
}

Claude Code (CLI)

Run this command in your terminal.

claude mcp add numonic \
  --transport http \
  --url "https://<project>.supabase.co/functions/v1/mcp-server" \
  --header "Authorization: Bearer napi_your_key_here"

Cursor / Windsurf

Add to your project's .cursor/mcp.json or global MCP settings.

{
  "mcpServers": {
    "numonic": {
      "url": "https://<project>.supabase.co/functions/v1/mcp-server",
      "headers": {
        "Authorization": "Bearer napi_your_key_here"
      }
    }
  }
}

Custom Agents (SDKs)

import { Client } from '@modelcontextprotocol/sdk/client/index.js';
import { StreamableHTTPClientTransport }
  from '@modelcontextprotocol/sdk/client/streamableHttp.js';

const transport = new StreamableHTTPClientTransport(
  new URL('https://<project>.supabase.co/functions/v1/mcp-server'),
  {
    requestInit: {
      headers: { Authorization: 'Bearer napi_your_key_here' },
    },
  }
);

const client = new Client({ name: 'my-agent', version: '1.0.0' });
await client.connect(transport);

// Search for assets
const result = await client.callTool('SearchAssets', {
  query: 'tool:midjourney AND tag:approved',
  limit: 10,
});
console.log(result.content);

Python

mcp
from mcp import ClientSession
from mcp.client.streamable_http import streamablehttp_client

async with streamablehttp_client(
    "https://<project>.supabase.co/functions/v1/mcp-server",
    headers={"Authorization": "Bearer napi_your_key_here"},
) as (read_stream, write_stream, _):
    async with ClientSession(read_stream, write_stream) as session:
        await session.initialize()

        tools = await session.list_tools()
        print(f"{len(tools.tools)} tools available")

        result = await session.call_tool(
            "SearchAssets",
            arguments={
                "query": "tool:midjourney AND tag:approved",
                "limit": 10,
            },
        )
        print(result.content)

Authentication

All API keys must start with the napi_ prefix. Keys are SHA-256 hashed server-side — Numonic never stores your raw key.

MethodHeaderNote
Bearer tokenAuthorization: Bearer napi_...Required by most MCP clients
API key headerX-API-Key: napi_...Preferred for direct HTTP
Legacy headerapi-key: napi_...Backwards compatibility

Multi-tenant access

If your API key has access to multiple tenants, pass X-Tenant-ID to select which tenant to operate on. If omitted, the key's default tenant is used.

Tools(64)

Atomic operations your agent can call via tools/call. Each tool accepts a JSON arguments object and returns structured results.

Asset Ingestion1 tool

Store and ingest assets into Numonic

StoreAsset

tool · asset ingestion

Store an asset (file) in Numonic with metadata and lineage. Provide EXACTLY ONE of: base64 bytes (asset_data_base64), a reference to a pre-uploaded object (asset_storage_ref), or an HTTPS URL the Edge Function will fetch server-side (asset_data_url). The URL channel accepts allowlisted hosts only (configured per-deployment via MCP_URL_INGEST_ALLOWLIST; default: signed Supabase URLs + Comfy Cloud + Midjourney CDN + Civitai + Numonic-managed S3). Default size cap 100 MB (MCP_URL_INGEST_MAX_BYTES); default fetch timeout 30s (override per-call via timeout_seconds, max 300). Distinct error codes: URL_EXPIRED, URL_FORBIDDEN_HOST, URL_TOO_LARGE, URL_FETCH_TIMEOUT, URL_CONTENT_TYPE_MISMATCH. Lineage (prompt_metadata) is REQUIRED — every asset must record what generated it.

ParameterTypeRequiredDescription
tenant_idstring ·uuidoptionalTenant ID (optional — auto-injected from API key auth, omit for automatic tenant detection)
filenamestringrequiredOriginal filename (non-empty)
mime_typestringrequiredMIME type of the asset (e.g., 'image/png', 'text/plain')
asset_data_base64stringoptionalBase64-encoded asset bytes for small assets. Provide either this OR asset_storage_ref.
asset_data_urlstring ·urioptionalHTTPS URL the Edge Function will fetch server-side. Allowlisted hosts only. Mutually exclusive with asset_data_base64 / asset_storage_ref. Returns dedicated error codes (URL_EXPIRED / URL_FORBIDDEN_HOST / URL_TOO_LARGE / URL_FETCH_TIMEOUT / URL_CONTENT_TYPE_MISMATCH).
allow_content_type_mismatchbooleanoptionalWhen asset_data_url is used, accept responses whose Content-Type does not match mime_type. Defaults to true because Comfy Cloud serves PNGs as application/octet-stream.
timeout_secondsintegeroptionalPer-call fetch timeout for asset_data_url (5–300s). Default 30.
asset_storage_refobjectoptionalReference to asset data already uploaded via signed URL. Mutually exclusive with asset_data_base64 / asset_data_url.
prompt_metadataobjectrequiredREQUIRED. Lineage of how this asset was generated (prompt + responding agent). Every asset must declare its provenance.
asset_metadataobjectoptionalOptional descriptive metadata for the asset.
tagsstring[]optionalOptional array of tag names to apply to the asset.
collection_hstringoptionalOptional Collection Hash (SHA-1) to add this asset to immediately on creation.
parent_asset_hstringoptionalOptional Asset Hash (SHA-1) of a parent asset if this is a version or derivation.

Asset Discovery3 tools

Retrieve individual assets, public URLs, and creative sessions

GetMidjourneyEvolutionChain

tool · asset discovery

Retrieve the evolution chain (parent→child lineage) for a Midjourney asset, showing how it evolved through variations and upscales.

ParameterTypeRequiredDescription
asset_idstring ·uuidrequiredUUID of the asset to get evolution chain for
max_depthnumberoptionalMaximum depth to traverse (default: 10, max: 50)

GetCreativeSession

tool · asset discovery

Discover all Midjourney assets created within a time window of a given asset, grouped by temporal proximity to form a "creative session".

ParameterTypeRequiredDescription
asset_idstring ·uuidrequiredUUID of the asset to find session for
time_windowstringoptionalTime window for session discovery (e.g., "2 hours", "30 minutes", "1 day")

GetAssetPublicUrl

tool · asset discovery

Reverse lookup: finds if an asset is in ANY published collection and returns the public URL. Returns one of three states: (1) Asset IS published with public_url, collection_path, preset, published_at; (2) Asset NOT published but in collections: lists collection paths; (3) Asset NOT in any collection: empty collections array.

ParameterTypeRequiredDescription
tenant_idstring ·uuidoptionalTenant UUID (optional - auto-injected from API key auth)
asset_hstringrequiredAsset hash (SHA-1, 40 hex chars) to look up

Annotations4 tools

Create, read, update, and delete asset annotations

CreateAnnotation

tool · annotations

Create a new annotation on a ComfyUI workflow node with full audit trail.

ParameterTypeRequiredDescription
workflow_node_idstringrequired40-character hexadecimal workflow node identifier
contentstringrequiredAnnotation text content (1-10000 characters)
content_typestringoptionalContent format type
enum: text · markdown · json
visibilitystringoptionalVisibility level: private (author only), team (tenant), public (all)
enum: private · team · public

GetAnnotations

tool · annotations

Retrieve all annotations for a specific ComfyUI workflow node with author information.

ParameterTypeRequiredDescription
workflow_node_idstringrequired40-character hexadecimal workflow node identifier
include_resolvedbooleanoptionalInclude resolved annotations in results (default: false)

UpdateAnnotation

tool · annotations

Update an existing annotation by creating a new version via supersession chain (effectivity pattern).

ParameterTypeRequiredDescription
annotation_idstringrequired40-character hexadecimal annotation identifier
contentstringoptionalUpdated annotation content (optional)
visibilitystringoptionalUpdated visibility level (optional)
enum: private · team · public

DeleteAnnotation

tool · annotations

Delete (soft delete) an annotation - marks it as deleted without removing data.

ParameterTypeRequiredDescription
annotation_idstringrequired40-character hexadecimal annotation identifier

Collections6 tools

Organise assets into named, versioned collections

ListCollections

tool · collections

List collections as a hierarchical tree for organizing assets. Supports filtering by parent path and depth.

ParameterTypeRequiredDescription
tenant_idstring ·uuidoptionalTenant UUID (optional - auto-injected from API key auth)
parent_pathstringoptionalOptional filter to list only descendants of this path (ltree format, e.g., "projects.nike")
include_asset_countsbooleanoptionalInclude asset count per collection. Default: true
max_depthnumberoptionalMaximum hierarchy depth to return (1-5). Default: 5

CreateCollection

tool · collections

Create a new collection with optional parent for hierarchy. Collections organize assets into folders with up to 5 levels of nesting.

ParameterTypeRequiredDescription
tenant_idstring ·uuidrequiredUUID of the tenant to create collection in
namestringrequiredCollection name (will be normalized to lowercase alphanumeric)
parent_pathstringoptionalParent collection path (ltree format) or null for root collection
display_namestringoptionalHuman-friendly display name. Auto-generated from name if not provided
descriptionstringoptionalOptional description for the collection
iconstringoptionalOptional icon identifier for UI
colorstringoptionalOptional hex color code (e.g., #3B82F6)

AddToCollection

tool · collections

Add one or more assets to a collection with optional position and role.

ParameterTypeRequiredDescription
tenant_idstring ·uuidrequiredUUID of the tenant
collection_pathstringrequiredCollection ltree path to add assets to (e.g., "projects.nike")
asset_hsstring[]requiredArray of asset hashes (SHA-1) to add
positionnumberoptionalOptional starting position for the first asset. Subsequent assets increment.
rolestringoptionalOptional role for all assets (KeyVisual, SupportingElement, ReferenceMaterial, BackgroundAsset, Logo, Variation, Other)
enum: KeyVisual · SupportingElement · ReferenceMaterial · BackgroundAsset · Logo · Variation · Other

GetCollectionAssets

tool · collections

Get assets in a collection with membership metadata (position, role, added date).

ParameterTypeRequiredDescription
tenant_idstring ·uuidrequiredUUID of the tenant
collection_pathstringrequiredCollection ltree path to get assets from
include_nestedbooleanoptionalInclude assets from all descendant collections. Default: false
limitnumberoptionalMaximum number of assets to return. Default: 50
offsetnumberoptionalOffset for pagination. Default: 0
order_bystringoptionalSort order: "position" or "added_at". Default: "position"
enum: position · added_at

BranchCollection

tool · collections

Create a branch or snapshot of a collection. Copies all asset memberships to the new collection. Useful for versioning, client deliveries, or template instances.

ParameterTypeRequiredDescription
tenant_idstring ·uuidrequiredUUID of the tenant
source_pathstringrequiredSource collection ltree path to branch from
new_namestringoptionalName for the branch. Auto-generated as "<source>_<type>_<timestamp>" if not provided
branch_typestringoptionalType of branch: "branch" (editable), "snapshot" (frozen), "template_instance". Default: "branch"
enum: branch · snapshot · template_instance
snapshot_labelstringoptionalHuman-readable label for snapshots (e.g., "v1.0", "Client Review")

MoveCollection

tool · collections

Move a collection (and all descendants) to a new parent location in the hierarchy.

ParameterTypeRequiredDescription
tenant_idstring ·uuidrequiredUUID of the tenant
source_pathstringrequiredSource collection ltree path to move
new_parent_pathstringoptionalNew parent ltree path. Null or empty to move to root level.

Publishing3 tools

Publish collections and retrieve public-access URLs

PublishCollection

tool · publishing

Publish a collection with specified privacy and publish presets, making assets publicly accessible. Applies ADR-057 metadata stripping rules and generates public URLs.

ParameterTypeRequiredDescription
tenant_idstring ·uuidrequiredUUID of the tenant
collection_hstringrequiredCollection hash (SHA-1, 40 hex chars) to publish
privacy_presetstringoptionalPrivacy preset for metadata stripping (ADR-057): share (strip workflow/models/GPS), portfolio (default, keeps attribution), client (business delivery), archive (keep all metadata)
enum: share · portfolio · client · archive
publish_presetstringoptionalImage optimization preset: web-standard (default), high-quality, thumbnail
enum: web-standard · high-quality · thumbnail

UnpublishCollection

tool · publishing

Remove a collection from public access. Published assets are marked as unpublished and deleted from public storage.

ParameterTypeRequiredDescription
tenant_idstring ·uuidrequiredUUID of the tenant
collection_hstringrequiredCollection hash (SHA-1, 40 hex chars) to unpublish

GetCollectionPublicUrls

tool · publishing

Get publication status and public URLs for all assets in a collection. Returns whether the collection is published, publication metadata, and URLs for each published asset.

ParameterTypeRequiredDescription
tenant_idstring ·uuidrequiredUUID of the tenant
collection_hstringrequiredCollection hash (SHA-1, 40 hex chars) to get public URLs for

Export2 tools

Export assets using configurable presets

ExportAssets

tool · export

Export assets with configurable privacy-aware metadata stripping for EU AI Act and CA SB 942 compliance. Supports presets (share, portfolio, client, archive, custom) or legacy export configurations.

ParameterTypeRequiredDescription
tenant_idstring ·uuidrequiredUUID of the target tenant for this export operation
asset_hsstring[]requiredArray of Asset Hashes (SHA1) to be exported
presetstringoptionalExport preset: share (social media, max privacy), portfolio (keeps attribution), client (business delivery), archive (full metadata), custom (user-defined)
enum: share · portfolio · client · archive · custom
optionsobjectoptionalCustom options (only when preset is "custom"). Fine-grained control over metadata stripping.
formatstringoptionalOutput format (preserve = keep source format)
enum: png · jpeg · webp · preserve
export_configuration_hstringoptionalLegacy: Export Configuration Hash. Mutually exclusive with preset.

ListExportPresets

tool · export

List available export presets with their default options and compliance status. Returns preset configurations for privacy-aware asset exports following ADR-057.

ParameterTypeRequiredDescription
tenant_idstring ·uuidrequiredTenant UUID (for tenant-specific presets if available)

Analytics2 tools

Query search analytics and tenant storage metrics

GetTenantStorageDetails

tool · analytics

Retrieve storage usage details for a tenant including bytes used, GB used, storage limit, percentage used, and over-limit status. Helps monitor storage consumption and enforce storage quotas.

ParameterTypeRequiredDescription
tenant_idstring ·uuidoptionalOptional: UUID of the tenant to query. If omitted, uses the tenant_id from auth context (current user's tenant).

GetSearchAnalytics

tool · analytics

Retrieve search analytics summary with health assessment (green/amber/red) for monitoring search quality. Returns zero-result rate, latency percentiles (P50/P95/P99), query-type breakdown, and top zero-result queries. Health thresholds: zero-result rate (<15% green, 15-25% amber, >25% red), P95 latency (<500ms green, 500-1000ms amber, >1000ms red).

ParameterTypeRequiredDescription
periodintegeroptionalNumber of days to aggregate (1-90). Default: 7.
tenant_idstring ·uuidoptionalOptional: UUID of the tenant to query. If omitted, returns analytics for all tenants or current user's tenant.

Pipelines5 tools

Execute, save, list, and run reusable processing pipelines

ExecutePipeline

tool · pipelines

Execute a multi-stage asset pipeline. Compose select, filter, transform, action, output, and summarize stages into a single operation. Use dry_run: true to preview changes before committing. Stages by category: SELECT: search, collection, ids, diff (set comparison). FILTER: where, sort, limit, deduplicate, sample. TRANSFORM: set_tag, remove_tag, set_field, regex_replace, compute, set_visibility, set_owner, enrich (stub), approve (stub). ACTION: add_to_collection, move, delete, archive. OUTPUT: export (ADR-057 privacy-aware), notify (stub), tee (passthrough fan-out). SUMMARIZE: count, group_by, stats, histogram. Output stages require confirm: true and are skipped during dry-run. Summarize stages execute during dry-run to provide aggregation previews.

ParameterTypeRequiredDescription
stagesobject[]requiredOrdered list of pipeline stages. Must start with a select stage (search, collection, ids, or diff).
dry_runbooleanoptionalPreview what would happen without executing mutations. Transform/action stages show simulated side effects. Output stages are skipped. Summarize stages execute to provide aggregation previews. Default: false.
timeout_msnumberoptionalMaximum execution time in milliseconds (1000-60000). Default: 30000.

SavePipeline

tool · pipelines

Create or update a named saved pipeline. Provide pipeline_definition_h to update an existing pipeline (SCD Type 2 versioning preserves full edit history). Omit it to create a new pipeline. Pipelines are identified by slug (derived from name) and stored with full stage definitions.

ParameterTypeRequiredDescription
namestringrequiredPipeline name (used to generate URL-safe slug). Must be unique per tenant.
stagesobject[]requiredOrdered pipeline stage definitions (same format as ExecutePipeline stages)
descriptionstringoptionalHuman-readable description of what this pipeline does
default_dry_runbooleanoptionalDefault dry_run setting when run without override (default: false)
default_timeout_msnumberoptionalDefault timeout in ms, 1000-60000 (default: 30000)
tagsstring[]optionalLabels for organizing pipelines (e.g., ["weekly", "client-delivery"])
pipeline_definition_hstringoptional40-char hex hash of existing pipeline to update. Omit to create new.

ListPipelines

tool · pipelines

List saved pipelines for the current tenant. Returns pipeline metadata including name, stage count, tags, and default execution settings. Use pipeline_definition_h from results with RunSavedPipeline to execute.

ParameterTypeRequiredDescription
tagsstring[]optionalFilter by tags (e.g., ["weekly"])

RunSavedPipeline

tool · pipelines

Execute a saved pipeline by ID or name. Supports overriding default_dry_run and default_timeout_ms at run time. Returns the same execution trace as ExecutePipeline. Provide either pipeline_definition_h (40-char hex) or pipeline_name (resolved automatically).

ParameterTypeRequiredDescription
pipeline_definition_hstringoptional40-char hex hash of the pipeline to run
pipeline_namestringoptionalPipeline name (alternative to pipeline_definition_h). Resolved to hash automatically.
dry_runbooleanoptionalOverride the saved default_dry_run. Defaults to pipeline's saved setting.
timeout_msnumberoptionalOverride the saved default_timeout_ms (1000-60000)
varsobjectoptionalRuntime variable injection (merged into pipeline context vars)

ListPipelineTemplates

tool · pipelines

List available pipeline templates for the current tenant. Returns system templates (available to all tenants) plus any tenant-specific templates. Use the pipeline_definition_h from results with POST /api/v1/pipelines/templates to clone a template into a new saved pipeline.

Pipeline Stages6 tools

Execute individual pipeline stages (select, filter, transform, etc.)

SelectStage

tool · pipeline stages

Execute a single SELECT-category pipeline stage. SELECT stages are entry points that produce an initial asset set. Supported stage_type values: search (text query), collection (load from collection path), ids (explicit asset hashes), diff (set difference between two sub-selects).

ParameterTypeRequiredDescription
stage_typestringrequiredThe SELECT stage type to execute
enum: search · collection · ids · diff
configobjectrequiredStage-specific configuration. search: { query: "tag:approved" }. collection: { path: "projects.nike", include_nested: true }. ids: { asset_ids: ["abc..."] }. diff: { set_a: {...}, set_b: {...}, mode: "only_in_a" }.
dry_runbooleanoptionalIf true, simulates execution without side effects

FilterStage

tool · pipeline stages

Execute a single FILTER-category pipeline stage on a set of assets. Supported stage_type values: where (field filter), sort (order by field), limit (cap result count), deduplicate (remove duplicates), sample (random subset).

ParameterTypeRequiredDescription
stage_typestringrequiredThe FILTER stage type to execute
enum: where · sort · limit · deduplicate · sample
configobjectoptionalStage-specific configuration. sort: { by: "created_at", order: "desc" }. limit: { count: 20 }. where: { field: "tool", operator: "eq", value: "midjourney" }.
assetsstring[]requiredArray of asset hashes to filter. Required for non-SELECT stages.
dry_runbooleanoptionalIf true, simulates execution without side effects

TransformStage

tool · pipeline stages

Execute a single TRANSFORM-category pipeline stage on a set of assets. Modifies asset metadata or triggers AI enrichment. Supported stage_type values: set_tag, remove_tag, set_field, regex_replace, compute, set_visibility, set_owner, enrich, approve.

ParameterTypeRequiredDescription
stage_typestringrequiredThe TRANSFORM stage type to execute
enum: set_tag · remove_tag · set_field · regex_replace · compute · set_visibility · set_owner · enrich · approve
configobjectoptionalStage-specific configuration. set_tag: { tags: ["approved"] }. enrich: { operations: ["auto_tag"] }. set_field: { field: "status", value: "reviewed" }.
assetsstring[]requiredArray of asset hashes to transform
dry_runbooleanoptionalIf true, simulates execution without side effects

ActionStage

tool · pipeline stages

Execute a single ACTION-category pipeline stage on a set of assets. Performs structural operations like moving, deleting, or archiving assets. Supported stage_type values: add_to_collection, move, delete, archive.

ParameterTypeRequiredDescription
stage_typestringrequiredThe ACTION stage type to execute
enum: add_to_collection · move · delete · archive
configobjectoptionalStage-specific configuration. add_to_collection: { path: "projects.nike" }. move: { from: "inbox", to: "approved" }. delete: { confirm: true }. archive: { confirm: true }.
assetsstring[]requiredArray of asset hashes to act on
dry_runbooleanoptionalIf true, simulates execution without side effects

OutputStage

tool · pipeline stages

Execute a single OUTPUT-category pipeline stage on a set of assets. Produces outputs like exports, notifications, or tee copies. Supported stage_type values: export, notify, tee.

ParameterTypeRequiredDescription
stage_typestringrequiredThe OUTPUT stage type to execute
enum: export · notify · tee
configobjectoptionalStage-specific configuration. export: { preset: "client", confirm: true }. notify: { event_type: "pipeline.completed" }. tee: { action: { type: "add_to_collection", path: "backup" } }.
assetsstring[]requiredArray of asset hashes for output
dry_runbooleanoptionalIf true, simulates execution without side effects

SummarizeStage

tool · pipeline stages

Execute a single SUMMARIZE-category pipeline stage on a set of assets. Produces aggregate data and statistics. Supported stage_type values: count, group_by, stats, histogram.

ParameterTypeRequiredDescription
stage_typestringrequiredThe SUMMARIZE stage type to execute
enum: count · group_by · stats · histogram
configobjectoptionalStage-specific configuration. count: { group_by: "tool" }. group_by: { field: "mime_type" }. stats: { field: "file_size" }. histogram: { field: "created_at" }.
assetsstring[]requiredArray of asset hashes to summarize
dry_runbooleanoptionalIf true, simulates execution without side effects

Automation Rules3 tools

Create, list, and trigger automation rules

CreateRule

tool · automation rules

Create an automation rule that triggers a saved pipeline on events, schedules, or watch intervals. Provide pipeline_definition_h (40-char hex) or pipeline_name (resolved automatically). Trigger types: event (fires on asset/pipeline events), schedule (cron-based), watch (periodic query check).

ParameterTypeRequiredDescription
namestringrequiredRule name (unique per tenant)
descriptionstringoptionalHuman-readable description of what this rule does
trigger_configobjectrequiredTrigger configuration with type discriminator. Event: { type: "event", event_type: "pipeline.completed" }. Schedule: { type: "schedule", cron: "0 9 * * 1" }. Watch: { type: "watch", query: "tag:unreviewed", interval_minutes: 60 }.
rate_limit_configobjectoptionalOptional rate limiting config (e.g., { max_executions_per_hour: 10 })
pipeline_varsobjectoptionalVariables to inject into pipeline context when rule fires
pipeline_definition_hstringoptional40-char hex hash of the saved pipeline to trigger
pipeline_namestringoptionalPipeline name (alternative to pipeline_definition_h). Resolved to hash automatically.

ListRules

tool · automation rules

List automation rules for the current tenant with optional filters. Returns rule metadata including name, trigger type, enabled status, and linked pipeline.

ParameterTypeRequiredDescription
enabledbooleanoptionalFilter by enabled/disabled status
trigger_typestringoptionalFilter by trigger type
enum: event · schedule · watch
tenant_idstring ·uuidoptionalTenant UUID (optional - auto-injected from API key auth)

TriggerRule

tool · automation rules

Manually trigger automation rule processing. For schedule/watch: evaluates all due rules for the tenant. For event: dispatches to matching event-based rules. Returns execution results for each triggered rule.

ParameterTypeRequiredDescription
trigger_typestringrequiredType of trigger to process: schedule (check cron-due rules), watch (check query-based rules), event (dispatch event to matching rules)
enum: schedule · watch · event
event_typestringoptionalEvent type to dispatch (required when trigger_type is "event", e.g., "pipeline.completed")
event_dataobjectoptionalEvent payload data (optional, passed to matching event rules)
tenant_idstring ·uuidrequiredTenant UUID (required for event dispatch)

Webhooks1 tool

Register webhooks for event-driven integrations

RegisterWebhook

tool · webhooks

Register a new webhook subscription to receive event notifications. Returns webhook ID and signing secret (shown once). Supports events: pipeline.completed, pipeline.failed, pipeline.export.completed, test.ping.

ParameterTypeRequiredDescription
namestringrequiredHuman-readable name for the webhook subscription
urlstringrequiredHTTPS endpoint URL to receive webhook events (must be public, no private IPs)
eventsstring[]requiredEvent types to subscribe to (e.g., ["pipeline.completed", "pipeline.failed"])
descriptionstringoptionalOptional description of the webhook purpose
enabledbooleanoptionalWhether the webhook is enabled (default: true)
timeout_msnumberoptionalRequest timeout in milliseconds, 1000-60000 (default: 10000)

Uncategorised27 tools

Uncategorised

GetAssetDetails

tool · uncategorised

Retrieve comprehensive details for a specific asset by its SHA-1 hash. Returns metadata, tags, collections, provenance, embedding info, and copyright. Optionally generates a short-lived signed download URL.

ParameterTypeRequiredDescription
tenant_idstring ·uuidrequiredUUID of the tenant
asset_hstringrequiredThe Asset Hash (SHA-1) of the asset to retrieve
include_download_urlbooleanoptionalIf true, includes a short-lived signed URL for downloading the original asset binary. Defaults to false.

BulkUpdateAssetTags

tool · uncategorised

Add or remove a set of tags across up to 100 assets in one call. Per-asset behaviour: 'add' merges into the existing tag set (deduped); 'remove' deletes the listed tags from each asset. Assets whose tag set does not change are skipped silently and reported as unchanged in the response. Tenant-scoped; uses the same RLS path as PATCH /api/v1/assets/bulk-tag.

ParameterTypeRequiredDescription
tenant_idstring ·uuidrequiredUUID of the tenant
asset_hsstring[]requiredArray of asset hashes (SHA-1, 40-char hex) to apply the operation to. Min 1, max 100.
operationstringrequired'add' merges the tags into each asset's existing tag set (deduped); 'remove' deletes them. For replace-all semantics on a single asset, use UpdateAsset.
enum: add · remove
tagsstring[]requiredTag strings to add or remove. Min 1 char, max 100 chars per tag. Min 1 tag, max 50 tags per call.

UpdateAsset

tool · uncategorised

Partial update of a single asset's scalar metadata: description, title, and/or tags. Tag update on this tool REPLACES the entire existing tag set; for incremental add/remove operations across multiple assets use BulkUpdateAssetTags. At least one of description, title, or tags must be provided. Tenant-scoped; uses the same RLS path as PATCH /api/v1/assets/[assetH].

ParameterTypeRequiredDescription
tenant_idstring ·uuidrequiredUUID of the tenant
asset_hstringrequiredAsset hash (SHA-1, 40-char hex) of the asset to update.
descriptionstringoptionalOptional new asset description (max 5000 chars). Replaces any existing description verbatim.
titlestringoptionalOptional new asset title (max 500 chars).
tagsstring[]optionalOptional new tag set. REPLACES the entire existing tag set. For incremental add/remove use BulkUpdateAssetTags. Min 0 tags, max 500. Each tag 1–100 chars.

ExportCollectionAsPdf

tool · uncategorised

Export a collection as a PDF document. Returns the PDF as a base64-encoded string along with page count and processing time metadata. The web API handles layout, pagination, and optional watermark removal.

ParameterTypeRequiredDescription
tenant_idstring ·uuidrequiredUUID of the tenant
collection_hstringrequiredCollection hash (SHA-1, 40 hex chars) to export
remove_watermarkbooleanoptionalWhether to remove the Numonic watermark from the exported PDF. Default: false.

AddTextCardToCollection

tool · uncategorised

Add a rich-text card (slide) to a collection. Text cards are rendered as full slides in PDF exports and can contain a heading, body text, bullet points, and an accent callout. Supports dark, gradient, and light backgrounds with optional hex accent color.

ParameterTypeRequiredDescription
tenant_idstring ·uuidrequiredUUID of the tenant
collection_hstringrequiredCollection hash (SHA-1, 40 hex chars)
headingstringoptionalCard heading text
heading_sizestringoptionalHeading size: xl, lg, or md
enum: xl · lg · md
bodystringoptionalBody text for the card
bulletsstring[]optionalArray of bullet point strings
accent_textstringoptionalHighlighted callout text
backgroundstringoptionalBackground style. Default: dark
enum: dark · gradient · light
accent_colorstringoptionalHex color code for accent elements (e.g., #3B82F6)
layoutstringoptionalLayout style. Default: centered
enum: centered · left-aligned
positionintegeroptionalPosition in collection ordering (0-based)

SearchModels

tool · uncategorised

Search the Model Library for models (LoRAs, checkpoints, UNETs, etc.) by name, type, or base architecture. Returns model entities with metadata, not assets. Use GetAssetModels to find assets by model.

ParameterTypeRequiredDescription
tenant_idstring ·uuidoptionalUUID of the tenant
querystringoptionalText search across model name, display name, and description. Supports partial matching.
model_typestringoptionalFilter by model type: lora, checkpoint, unet, clip, upscaler, controlnet, vae, embedding, ip_adapter, llm, etc.
base_modelstringoptionalFilter by base architecture: sdxl, flux, sd15, sd3, sd35, pony, illustrious, noobai, hunyuan, etc.
limitintegeroptionalMaximum results to return (default: 50)
offsetintegeroptionalOffset for pagination (default: 0)

GetModelDetails

tool · uncategorised

Get full details for a specific model including metadata, version history, asset usage count, and preview count.

ParameterTypeRequiredDescription
tenant_idstring ·uuidoptionalUUID of the tenant
model_hashstringrequiredSHA-1 hash key of the model (from models_h.model)

GetAssetModels

tool · uncategorised

Get all models used to generate a specific asset, including LoRA weights and detection source.

ParameterTypeRequiredDescription
tenant_idstring ·uuidoptionalUUID of the tenant
asset_hashstringrequiredSHA-1 hash key of the asset

LinkModelToAsset

tool · uncategorised

Manually link a model to an asset (for non-ComfyUI sources where automatic detection is not available).

ParameterTypeRequiredDescription
tenant_idstring ·uuidoptionalUUID of the tenant
model_hashstringrequiredSHA-1 hash key of the model
asset_hashstringrequiredSHA-1 hash key of the asset
model_weightnumberoptionalLoRA strength_model value (e.g., 0.75). Null for checkpoints.
detection_sourcestringoptionalHow this link was discovered (default: manual_tag)

GetModelVersions

tool · uncategorised

Get version history for a model, including training steps, quality scores, and recommended flag.

ParameterTypeRequiredDescription
model_hashstringrequiredSHA-1 hash key of the model
include_deletedbooleanoptionalInclude soft-deleted versions (default: false)

AddModelVersion

tool · uncategorised

Add a version to a model with training metadata, quality score, and recommended flag.

ParameterTypeRequiredDescription
model_hashstringrequiredSHA-1 hash key of the model
version_tagstringrequiredVersion label (e.g., v1.0, v2.0, epoch10)
version_notesstringoptionalChangelog or description for this version
training_stepsintegeroptionalTotal training steps
training_epochsintegeroptionalTotal training epochs
training_configobjectoptionalTraining hyperparameters: {"lr": 0.0001, "optimizer": "AdamW"}
quality_scorenumberoptionalQuality rating (0-10)
is_recommendedbooleanoptionalMark as the recommended version for this model
trained_atstring ·date-timeoptionalWhen this version was trained

CreateExperiment

tool · uncategorised

Create an experiment collection for structured image comparison workflows (model benchmarking, prompt A/B testing, style evaluation). Returns the experiment collection hash.

ParameterTypeRequiredDescription
tenant_idstringrequiredTenant UUID
display_namestringrequiredHuman-readable experiment name
descriptionstringoptionalExperiment description
hypothesisstringoptionalWhat this experiment tests
independent_variablestringoptionalWhat varies across runs (e.g., "prompt condition", "model", "LoRA")
control_variablestringoptionalWhat is held constant (e.g., "seed set", "resolution")
model_namestringoptionalPrimary generation model (e.g., "FLUX.2 Dev")
workflow_namestringoptionalGeneration workflow (e.g., "txt2img")
resolutionstringoptionalImage resolution (e.g., "1024x1024")
domain_contextobjectoptionalDomain-specific metadata as JSON (e.g., {"grammar_version": "v3"})

RegisterRun

tool · uncategorised

Add an asset to an experiment as a run with full context (condition, seed, prompt, model, domain params).

ParameterTypeRequiredDescription
collection_hstringrequiredExperiment collection hash (40-char hex)
asset_hstringrequiredAsset hash to register as a run (40-char hex)
condition_idstringoptionalIndependent variable value for this run (e.g., "cond2b", "model_A")
variant_labelstringoptionalHuman-readable variant label (e.g., "Compiled prompt")
seedintegeroptionalGeneration seed
prompt_textstringoptionalExact prompt used for generation
model_namestringoptionalModel for this specific run (overrides experiment-level)
run_paramsobjectoptionalDomain-specific run parameters as JSON
outcome_tagsstring[]optionalOutcome classification tags (e.g., ["text_literalization", "best_in_set"])
positionintegeroptionalPosition/order within the experiment

ScoreRun

tool · uncategorised

Score an experiment run on user-defined dimensions. Creates an evaluation annotation. Dimensions are experiment-defined (e.g., quality, adherence, coherence).

ParameterTypeRequiredDescription
collection_item_hstringrequiredCollection item hash for the run to score (40-char hex)
scoresobjectrequiredScoring dimensions as key-value pairs (e.g., {"quality": 4, "coherence": 5}). Values are 1-5.
flagsobjectoptionalBoolean flags (e.g., {"prompt_leakage": true, "text_literalization": false})
evaluator_typestringoptionalWho/what performed the evaluation (default: "human")
enum: human · vlm_assisted · embedding_similarity
commentsstringoptionalFree-form evaluation comments

CompareRuns

tool · uncategorised

Create a pairwise A/B comparison between two experiment runs, recording which item wins on each scoring dimension.

ParameterTypeRequiredDescription
collection_hstringrequiredExperiment collection hash (40-char hex)
item_astringrequiredFirst run collection item hash (40-char hex)
item_bstringrequiredSecond run collection item hash (40-char hex)
winnersobjectrequiredDimension-to-winner mapping (e.g., {"quality": "<item_a_hash>", "coherence": "<item_b_hash>"})
evaluator_typestringoptionalWho/what performed the comparison (default: "human")
enum: human · vlm_assisted · embedding_similarity
notesstringoptionalComparison notes

GetExperimentSummary

tool · uncategorised

Get aggregated experiment results: run count, condition breakdown, outcome tag distribution, and comparison count.

ParameterTypeRequiredDescription
collection_hstringrequiredExperiment collection hash (40-char hex)

CreatePrompt

tool · uncategorised

Create a new prompt in the Prompt Library. Returns the prompt hash and version info.

ParameterTypeRequiredDescription
tenant_idstring ·uuidrequiredTenant UUID
prompt_textstringrequiredThe prompt text content (required)
namestringoptionalHuman-readable prompt name
descriptionstringoptionalPrompt description
target_modelstringoptionalTarget model (e.g., midjourney, dall-e, flux)
categorystringoptionalPrompt category (e.g., landscape, portrait)
tagsstring[]optionalPrompt tags for organization

GetPrompt

tool · uncategorised

Get a prompt by hash ID with full version history and evaluations.

ParameterTypeRequiredDescription
tenant_idstring ·uuidrequiredTenant UUID
prompt_hstringrequiredPrompt hub hash (40-char hex)

SearchPrompts

tool · uncategorised

Search prompts with optional category, target_model filters, and pagination.

ParameterTypeRequiredDescription
tenant_idstring ·uuidrequiredTenant UUID
categorystringoptionalFilter by category
target_modelstringoptionalFilter by target model
limitintegeroptionalPage size (default 20, max 100)
offsetintegeroptionalPagination offset (default 0)

RenderPrompt

tool · uncategorised

Render a prompt template by substituting {{variable}} placeholders with provided values.

ParameterTypeRequiredDescription
tenant_idstring ·uuidrequiredTenant UUID
prompt_hstringrequiredPrompt hub hash (40-char hex)
variablesobjectoptionalTemplate variables as key-value pairs (e.g., {"subject": "cityscape"})

RegisterProspect

tool · uncategorised

Register or update a cold-outreach prospect: writes prospects_h hub + tenant scoping link + prospect_profile_s, and optionally prospect_research_s when pain_hypothesis is supplied. Either email or linkedin_url required. Append-only — re-calling adds new satellite rows.

ParameterTypeRequiredDescription
tenant_idstring ·uuidrequiredUUID of the tenant
prospectobjectrequiredProspect data. Either email or linkedin_url is required (validated server-side).
record_sourcestringrequiredOrigin tag, e.g. "cold-outreach-studios:studios-2026-q2".

LogOutreachTouch

tool · uncategorised

Append a touch (email or LinkedIn message) to the outbound log and advance the prospect outreach sequence state. Both writes are append-only.

ParameterTypeRequiredDescription
tenant_idstring ·uuidrequiredUUID of the tenant
prospect_hstringrequiredProspect hub hash (SHA-1).
touchobjectrequired
record_sourcestringrequired

GetProspectState

tool · uncategorised

Return full prospect state: latest profile + research + state + suppression, plus all touches and replies, plus contact_link if hand-off has occurred.

ParameterTypeRequiredDescription
tenant_idstring ·uuidrequiredUUID of the tenant
prospect_hstringrequiredProspect hub hash (SHA-1).

SearchProspects

tool · uncategorised

Filter prospects by campaign, current sequence status, minimum ICP score, vertical, or account substring. Suppressed prospects (suppressed_until in the future) are excluded by default. Default limit 50, max 200.

ParameterTypeRequiredDescription
tenant_idstring ·uuidrequiredUUID of the tenant
filtersobjectoptional

SuppressProspect

tool · uncategorised

Suppress a prospect with a reason and end-date. Marks all active sequences for the prospect as suppressed. cold-outreach-studios convention: 12 months for unsubscribe / not_interested / wrong_person; reengage_date from the reply for not_now.

ParameterTypeRequiredDescription
tenant_idstring ·uuidrequiredUUID of the tenant
prospect_hstringrequired
reasonstringrequired
enum: unsubscribe · wrong_person · not_now · not_interested
suppressed_untilstring ·daterequiredISO date YYYY-MM-DD when suppression lifts.
record_sourcestringrequired

LogReply

tool · uncategorised

Record an inbound reply with cold-outreach-studios reply-triage classification. Advances sequence state: positive → replied, not_now/wrong_person/unsubscribe/not_interested → suppressed, ooo leaves state untouched. On positive reply, mints prospect_to_contact_l so lead-response v0.2 picks up the now-warm contact.

ParameterTypeRequiredDescription
tenant_idstring ·uuidrequiredUUID of the tenant
prospect_hstringrequired
replyobjectrequired
record_sourcestringrequired

SearchContacts

tool · uncategorised

List CRM contacts in a pipeline (community | enterprise | investor) with optional stage and free-text search. Wraps get_pipeline_contacts; returns the latest profile, pipeline stage, activity (last_contacted, next_follow_up), plus pipeline-specific satellite fields (investor: firm_name, investor_type, investment_amount, round, seis_eis_status). Default limit 50, max 200. tenant_id is auto-injected from API key auth.

ParameterTypeRequiredDescription
tenant_idstring ·uuidrequiredUUID of the tenant
pipelinestringrequiredWhich CRM pipeline to list. 'investor' for fundraise contacts.
enum: community · enterprise · investor
stagestringoptionalOptional pipeline-stage filter (e.g. "lead", "engaged", "diligence").
searchstringoptionalOptional case-insensitive substring match against contact name and linkedin_url.
limitintegeroptional
offsetintegeroptional

Resources(5)

Resources are browsable read-only data that MCP clients can read for context — collection structure, storage quotas, available presets. Unlike tools, resources don't modify state.

List with resources/list · read with resources/read:
{"jsonrpc":"2.0","method":"resources/read","params":{"uri":"numonic://collections"},"id":3}
numonic://collections

Collection Tree

resource

Hierarchical collection structure with names, paths, and asset counts. Useful for understanding how a library is organized before placing assets.

numonic://storage

Storage Usage

resource

Tenant storage: GB used, quota, percentage, over-limit flag. Check before uploading large batches.

numonic://export-presets

Export Presets

resource

Available privacy presets with compliance metadata (EU AI Act, CA SB 942).

numonic://pipeline-templates

Pipeline Templates

resource

System and tenant pipeline templates. Browse before building custom pipelines.

numonic://asset/{asset_h}

Asset Details

resource · template

Full metadata for a specific asset. Pass the 40-character hex asset hash. (URI template)

Prompts(5)

Guided multi-step workflows that teach agents the canonical way to accomplish common tasks. They return pre-written instructions that chain multiple tool calls together.

Get a prompt with prompts/get:
{"jsonrpc":"2.0","method":"prompts/get","params":{"name":"search-and-curate","arguments":{"query":"tool:midjourney AND tag:approved"}},"id":5}

Search & Curate

search-and-curateprompt

Search for assets, build a curated collection, and publish it.

Workflow: SearchAssets → CreateCollection → AddToCollection → PublishCollection
ArgumentRequiredDescription
queryrequiredSearch query or grammar expression
collection_nameoptionalName for the new collection
privacy_presetoptionalshare, portfolio, client (default), archive

Ingest & Organize

ingest-and-organizeprompt

Upload a new asset and file it into the correct collection.

Workflow: StoreAsset → ListCollections → AddToCollection
ArgumentRequiredDescription
filenamerequiredName of the file being uploaded
mime_typerequiredMIME type (e.g., image/png)
collection_pathoptionalTarget collection path

Export for Client

export-for-clientprompt

Export assets with privacy-aware metadata stripping for client delivery.

Workflow: SearchAssets or GetCollectionAssets → ExportAssets
ArgumentRequiredDescription
query_or_collectionrequiredSearch query or collection hash
presetoptionalPrivacy preset (default: client)

Audit Tenant Health

audit-tenant-healthprompt

Assess storage usage, search index quality, and overall tenant health.

Workflow: GetTenantStorageDetails → GetSearchAnalytics → summarize

Explore Lineage

explore-lineageprompt

Trace a Midjourney asset's complete evolution chain through variations, upscales, and remixes.

Workflow: GetMidjourneyEvolutionChain → GetCreativeSession → synthesize
ArgumentRequiredDescription
asset_hrequiredAsset hash (40-char hex)
depthoptionalMaximum chain depth (default: 10)

Error Codes

The MCP server uses standard JSON-RPC 2.0 error codes.

CodeNameMeaning
-32700Parse ErrorMalformed JSON in request body
-32600Invalid RequestMissing jsonrpc or method field
-32601Method Not FoundUnknown method name
-32602Invalid ParamsMissing or invalid parameters
-32603Internal ErrorServer-side exception

HTTP Status Codes

Parse errors and invalid requests return HTTP 400. All other errors (including tool failures) return HTTP 200 with the error in the JSON-RPC response body — per the JSON-RPC specification.

Tool-Level Errors

Tool errors are returned in the result's content array with isError: true:

{"content":[{"type":"text","text":"Error: …"}],"isError":true}

Protocol Details

ProtocolModel Context Protocol (JSON-RPC 2.0)
TransportStreamable HTTP (POST)
Supported versions2025-03-26 (primary), 2024-11-05 (backwards compatible)
Server nameNumonic-MCP-Server
Server version1.0.0
Tools64
Resources5 (4 static + 1 URI template)
Prompts5 guided workflows

Further Reading