fpt-mcp
The fpt-mcp server connects AI assistants to Autodesk Flow Production Tracking (ShotGrid), providing full API access, Toolkit integration, RAG-powered documentation search, and DCC launching for production management.
Core ShotGrid Operations
Search entities (
sg_find): Query any entity type (Asset, Shot, Task, Version, custom entities, etc.) with flexible filters, field selection, and sortingCreate/Update entities (
sg_create,sg_update): Create or modify any entity type with automatic project linkingInspect schema (
sg_schema): Discover available fields and types for any entityUpload/Download files (
sg_upload,sg_download): Transfer thumbnails, movies, or attachments to/from any entity field
Bulk & Editorial Operations (fpt_bulk)
Soft-delete (retire) or revive entities
Transactional batch create/update/delete (all-or-nothing)
Deterministically create Cuts + CutItems with computed edit ranges for editorial workflows
Reporting & Analysis (fpt_reporting)
Full-text search across multiple entity types simultaneously
Server-side aggregation (count, sum, avg, min, max) with optional grouping
Read full Note reply threads and entity activity/update streams
Toolkit & Path Resolution
Resolve publish paths (
tk_resolve_path): Compute correct paths using the project's PipelineConfiguration and templatesPublish files (
tk_publish): Copy source files, register PublishedFile entities, and link to Tasks
DCC Application Launching (fpt_launch_app)
Launch Maya or Flame scoped to a ShotGrid entity (Asset, Shot, Task, etc.) with Toolkit context injection and version selection
Supports dry-run mode (returns launch plan without spawning)
Asset Source Resolution (sg_resolve_source)
Resolve the best generation input (image or text) for an Asset by ranking linked Version stills, thumbnails, and descriptions โ used as an entry point for AI generation workflows
RAG Anti-Hallucination Engine
Search ShotGrid docs (
search_sg_docs): Hybrid semantic + BM25 search over verified ShotGrid API, Toolkit, and REST API documentation to prevent filter/operator hallucinationsLearn patterns (
learn_pattern): Persist validated API patterns into the knowledge base for future sessions
Session Management
Session stats (
session_stats): Track token usage, RAG savings, cache hits, and efficiency metricsReset stats (
reset_session_stats): Zero session counters for a fresh run
Operational Safety & Connectivity
Automatically scans and blocks potentially destructive operations (e.g., bulk delete without specific IDs, schema modifications, path traversal)
Supports standard I/O (Claude Desktop/Code), HTTP server mode, and a native Qt console with a custom protocol handler for ShotGrid Action Menu Items
Compatible with Anthropic Claude models and experimentally with local Ollama models
Provides tools to connect AI assistants to Autodesk Flow Production Tracking (ShotGrid) for production management, including querying, creating, updating, and deleting entities, resolving Toolkit paths, and retrieving API documentation.
Click on "Deploy Server".
Wait a few minutes for the server to deploy. Once ready, it will show a "Started" state.
In the chat, type
@followed by the MCP server name and your instructions, e.g., "@fpt-mcpget all tasks for shot 'SQ01_SH001'"
That's it! The server will respond to your query, and you can continue using it as needed.
Here is a step-by-step guide with screenshots.
fpt-mcp
Connect Claude to Autodesk Flow Production Tracking (ShotGrid) for production management using the Model Context Protocol (MCP)
Experimental project โ use at your own risk. This is an independent, unofficial experiment created with Claude Code. It is not affiliated with, endorsed by, or officially supported by Autodesk in any way. The ShotGrid / Flow Production Tracking name and trademarks belong to Autodesk, Inc.
Allowing AI-generated operations against a live ShotGrid instance carries real risks: unintended data modifications, accidental entity deletion, incorrect publishes, or metadata corruption. Always test against a dedicated sandbox project first. Never run this against production data without understanding the operations being performed. The author(s) accept no responsibility for data loss, corruption, or any other damage resulting from its use.
๐ Code knowledge graph
Interactive, auto-published map of this codebase โ modules, functions, call/import edges and community clusters โ rebuilt by graphify and deployed to GitHub Pages on every push to src/:
abrahamadsk.github.io/fpt-mcp ยท part of the MCP ecosystem graph hub.
MCP server for Autodesk Flow Production Tracking (formerly ShotGrid).
Gives any MCP-compatible AI assistant (Claude Desktop, Claude Code, or any MCP client) full access to the ShotGrid API, Toolkit path resolution, and a RAG-powered knowledge engine that prevents common API hallucinations.
Claude Desktop / Claude Code / any MCP client
โโโ fpt-mcp
โโโ stdio โ Claude Desktop / Claude Code
โโโ HTTP โ scripts, inter-service calls
โโโ Qt console โ native chat app via fpt-mcp:// protocol handlerRelated MCP server: Devcon MCP Workshop 2026
Features
Unrestricted ShotGrid API Access
fpt-mcp exposes the full shotgun_api3 Python SDK without locking down entity types or fields. Any entity โ Asset, Shot, Sequence, Version, Task, PublishedFile, or custom entities โ can be queried, created, updated, deleted, or batched through a single consistent set of tools. This matters because production pipelines vary widely: the server never assumes which entity types or field names a studio uses.
Toolkit Path Resolution
When a project has an Advanced Setup in ShotGrid, the server queries the PipelineConfiguration entity, reads roots.yml and templates.yml directly from the installed Toolkit config, and resolves publish paths using the project's real template definitions. No paths are hardcoded โ the resolution uses whatever tk-config is installed, whether default, custom, or forked. Projects without a PipelineConfiguration still get full publish support through explicit path fallback.
RAG Anti-Hallucination Engine
LLMs hallucinate ShotGrid API details constantly โ invalid filter operators, wrong entity reference formats, non-existent Toolkit template tokens. fpt-mcp counters this with a hybrid retrieval system: at query time, search_sg_docs performs semantic search (ChromaDB + BAAI/bge-large-en-v1.5) and lexical search (BM25) against three verified API reference documents, fuses the rankings with RRF, and injects the most relevant chunks into Claude's context. The result is correct filter syntax and valid entity formats on the first attempt instead of the third.
Safety Layer
The safety.py module scans every tool call before execution against twelve regex patterns that cover the most destructive operations: bulk delete without specific IDs, unfiltered queries with no limit, path traversal in publish paths, PublishedFile deletion, invalid filter operators, large batch operations, and schema modifications. Blocked operations return a warning with a safe alternative โ they never reach the ShotGrid API.
The two tools that actually write files โ tk_publish (copies a source file to a publish path) and sg_download (writes a downloaded attachment) โ additionally enforce write-path containment via paths.py. Each write destination is anchored on a legitimate project root before any bytes are written, computed on the real path (os.path.realpath + Path.is_relative_to), so it catches dot-dot traversal, absolute escapes with no .. (e.g. /etc/passwd), and symlink escapes that the detection-only safety.py regex cannot. Allowed roots = the discovered TkConfig.project_root (when a PipelineConfiguration resolves) plus the FPT_MCP_ALLOWED_WRITE_ROOTS allowlist. The default policy is warn-and-allow (a destination outside the roots is logged and permitted, so existing workflows are unaffected); set FPT_MCP_STRICT_PATHS=1 to turn it into a hard refusal that writes nothing. See FPT_MCP_ALLOWED_WRITE_ROOTS / FPT_MCP_STRICT_PATHS below.
Structured ShotGrid error responses
When a ShotGrid call fails on authentication, connectivity, or a protocol error, the tool no longer surfaces an opaque Error executing tool ... string. Instead sg_errors.py translates the shotgun_api3 fault family (AuthenticationFault, Fault, MissingTwoFactorAuthenticationFault, ProtocolError, ResponseError, ShotgunFileDownloadError) plus the underlying socket/urllib/SSL/timeout errors โ and the credential EnvironmentError raised at startup by _validate_config โ into a consistent JSON object the model can branch on:
{
"error": "<scrubbed, truncated server message>",
"error_type": "authentication_failed",
"hint": "ShotGrid rejected the credentials. Check SHOTGRID_SCRIPT_NAME / SHOTGRID_SCRIPT_KEY in .env (SG Admin -> Scripts) ...",
"retryable": false
}error_type is a stable machine-readable class (authentication_failed, two_factor_required, sso_credentials_rejected, shotgrid_api_fault, protocol_error, malformed_response, download_failed, ssl_error, timeout, connection_error, config_error), hint is concrete remediation guidance, and retryable is an advisory label (the server does not auto-retry โ a 5xx/timeout is worth retrying, a bad key is not). The translation is applied by the @sg_errors_to_json decorator at the *_impl / *_do_* tool-boundary layer, reusing the standard top-level error key so the result is counted as a failed turn (p_fallo) and skips suggestion annotation like every other error path. The echoed server message is scrubbed of credential-shaped tokens and truncated to 300 characters. Unrecognised exceptions (genuine bugs) are re-raised with their traceback rather than swallowed.
Qt Console and Protocol Handler
fpt-mcp ships a native PySide6 chat window that routes messages through the Claude Code CLI and renders responses with full Markdown support. The console registers the fpt-mcp:// custom URL scheme on macOS, which means a ShotGrid Action Menu Item can open a chat window with full entity context (entity type, ID, project) pre-populated in a single click โ no browser tab, no copy-paste of IDs.
Requirements
Python >= 3.13
macOS (for protocol handler; Qt console also works on Linux/Windows without protocol handler)
shotgun_api3(ShotGrid Python API)mcp[cli](MCP Python SDK with FastMCP)pydantic>= 2.0PySide6>= 6.6 (Qt for Python)python-dotenvhttpxpyyaml(Toolkit config parsing)chromadb>= 0.5.0 (RAG vector database)sentence-transformers>= 2.2.0 (RAG embeddings โ BAAI/bge-large-en-v1.5)rank-bm25>= 0.2.2 (RAG lexical search)Claude Code CLI (
npm install -g @anthropic-ai/claude-code)
Optional โ local / free inference with Ollama:
Ollama >= 0.17.6
macOS:
brew install ollama && brew services start ollamaLinux: https://ollama.com/download/linux (systemd)
Verify:
ollama --version
Create the
qwen3.5-mcpmodel (required for Ollama backends):ollama pull qwen3.5:9b cat > /tmp/Modelfile.qwen35mcp <<'EOF' FROM qwen3.5:9b PARAMETER num_ctx 16384 PARAMETER temperature 0.7 PARAMETER top_p 0.8 PARAMETER top_k 20 EOF ollama create qwen3.5-mcp -f /tmp/Modelfile.qwen35mcpSee MODEL_STRATEGY.md for the full rationale (num_ctx bump,
think: falserequirement, KEEP_ALIVE tuning, KV-cache dtype)
โ ๏ธ The Ollama backends are experimental โ recommended for offline or lightweight single-tool use. For the full pipeline use the Anthropic backend (see LLM backends).
Install
cd fpt-mcp
python3 -m venv .venv
source .venv/bin/activate
pip install -e .Or use the automated installer (creates venv, installs deps, builds RAG index, registers in Claude Code, pre-approves tools):
chmod +x install.sh
./install.shAfter installing, run the doctor to verify everything is wired correctly:
./install.sh --doctorA legacy setup_venv.sh script also exists (creates venv + launchd service + Qt console .app bundle on macOS) but install.sh is the recommended entry point.
Configure (MANDATORY โ do not skip)
Runningsetup_venv.sh or install.sh on its own is not enough.
The installer creates .env from the template but leaves the fields
holding placeholder values. Until you edit .env with your real
ShotGrid credentials, every MCP call fails with an SSL
CERTIFICATE_VERIFY_FAILED error.
Copy .env.example โ .env (or let the installer do it) and replace
every field with your real values:
SHOTGRID_URL=https://your-actual-site.shotgrid.autodesk.com
SHOTGRID_SCRIPT_NAME=your-actual-script-name
SHOTGRID_SCRIPT_KEY=your-actual-application-key
SHOTGRID_PROJECT_ID=123Where each field comes from:
SHOTGRID_URLโ the exact URL you use to log into your ShotGrid site via browser, in the formhttps://<your-site>.shotgrid.autodesk.com.SHOTGRID_SCRIPT_NAMEโ the name of an API script registered in ShotGrid Admin โ Scripts. If you don't have one with the permissions you need, create it there first.SHOTGRID_SCRIPT_KEYโ the application key shown next to the script name in the same admin page.SHOTGRID_PROJECT_IDโ integer ID of the project you work in most often. Used as a default filter forsg_find,sg_create,sg_upload, and as the key for ToolkitPipelineConfigurationlookup. Set to0to disable the default filter (every call must then specify project explicitly).
After editing .env, restart any running fpt-mcp process (Qt console, MCP server) so it picks up the new values.
Optional: server-behaviour env vars
These are optional and control server-side behaviour, not ShotGrid identity:
FPT_MCP_ALLOWED_WRITE_ROOTSโos.pathsep-separated list of absolute directory roots thattk_publishandsg_downloadare permitted to write under. The effective allowlist is this list UNION the discoveredTkConfig.project_root(when a PipelineConfiguration resolves). Leave unset to rely solely on the discovered project root (or, with no config, no root โ see the policy below).FPT_MCP_STRICT_PATHSโ set to1to enforce write-path containment: a destination outside the allowed roots is refused with an{"error": ...}and nothing is written. Default (unset / any other value) is warn-and-allow: the out-of-root destination is logged and the write proceeds, so no existing workflow breaks. Turn this on once you have declared your write roots viaFPT_MCP_ALLOWED_WRITE_ROOTS.
The installer scripts now detect placeholder values left in .env and emit a visible warning at the end of the install. The MCP server itself will also refuse to start with a clear error message pointing to .env if placeholders remain. Both safeguards exist specifically to prevent confusing SSL errors on the first real call.
Verify credentials
After editing .env, run the doctor to validate connectivity end-to-end:
./install.sh --doctorThe doctor performs five independent checks โ claude.json registration, .env placeholder detection, venv importability, live ShotGrid API connectivity, and Qt dependency availability. Any FAIL line includes a concrete remediation sentence.
Common pitfalls:
Placeholder values left in
.envโ the most frequent cause ofCERTIFICATE_VERIFY_FAILEDerrors on first use. The doctor detects these automatically.SHOTGRID_PROJECT_ID=0โ disables default project scoping. Everysg_find,sg_create, andsg_uploadcall must then specify a project filter explicitly. This is valid for multi-project workflows but unexpected for single-project setups.Script key vs. user credentials โ the
.envkey is an API script key from Admin โ Scripts, not your personal login password.Stale
.envafter site migration โ if your ShotGrid site URL changes (e.g. during an Autodesk ID migration), updateSHOTGRID_URLand re-run--doctor.
Usage
Once configured, fpt-mcp is available through Claude Code, Claude Desktop, or the Qt console. Connect to your ShotGrid instance and start a conversation:
You: "Find all Character assets in the Sunrise project that are currently in Pending Review"
Claude โ search_sg_docs (filter syntax for Asset) โ sg_find (entity=Asset, filters=[project, sg_asset_type, sg_status_list]) โ Returns asset list with name, status, and assigned tasksYou: "Create a new Shot called sh0150 in sequence SQ010 for project Sunrise, cut in 1001 cut out 1024"
Claude โ search_sg_docs (Shot entity format) โ sg_create (entity=Shot, fields={code, sg_sequence, project, sg_cut_in, sg_cut_out}) โ Shot created and linked to sequenceYou: "Publish /jobs/sunrise/assets/char_hero/maya/publish/char_hero_v003.ma to the Rigging task on asset Hero"
Claude โ search_sg_docs (publish pattern) โ tk_resolve_path (PipelineConfiguration lookup) โ tk_publish (copy file, find/create PublishedFileType, link Task, register PublishedFile) โ Publish registered in ShotGridYou: "How do I filter Versions by review status using the ShotGrid Python API?"
Claude โ search_sg_docs (status filter operators, Version entity) โ Returns verified filter syntax, valid operator names, and a working code example from the RAG knowledge baseTools (18 MCP tool registrations โ dispatcher pattern)
General-purpose tools with no entity restrictions โ works with any ShotGrid entity type and field. Bulk and reporting operations are consolidated behind two dispatcher tools to reduce tool-count overhead for the LLM.
ShotGrid API โ Direct Tools (6 tools)
Tool | Description |
| Search any entity type with any filters and fields |
| Create any entity with any fields (project auto-linked) |
| Update any field on any entity |
| Inspect available fields for any entity type |
| Upload file to any entity field (thumbnail, movie, attachment) |
| Download attachment from any entity field |
Source Resolver (1 tool)
Tool | Description |
| Resolve an Asset's best generation input for the World Labs / Vision3D entry flow โ ranks linked Version stills, the Asset thumbnail, and the Asset description by priority (image over text; video deferred) and returns resolved / requires_choice / text_only / no_source, downloading the chosen image when a download path is given |
ShotGrid API โ Bulk Dispatcher (fpt_bulk โ 1 tool, 4 actions)
Action | Description |
| Soft-delete (retire) any entity. Can be restored from trash |
| Restore a previously retired entity |
| Transactional bulk operations โ all succeed or all fail |
| Deterministically create a Cut + one CutItem per shot. Cumulative edit ranges, source ranges and handles are computed in Python (see |
ShotGrid API โ Reporting Dispatcher (fpt_reporting โ 1 tool, 4 actions)
Action | Description |
| Full-text search across multiple entity types simultaneously |
| Server-side aggregation: count, sum, avg, min, max with grouping |
| Read the full reply thread of a Note with all nested replies |
| Read the activity stream (updates, status changes, notes) for an entity |
Toolkit (2 tools)
Tool | Description |
| Resolve publish path from the project's real PipelineConfiguration |
| Publish file: resolve path, copy file, find/create PublishedFileType, link Task, register in ShotGrid |
| Generate a CMX 3600 EDL from a ShotGrid Cut + CutItems (drives Flame's native Conform) |
| Write a versioned Flame Open Clip (.clip) from a shot's published render sequences (Source Versions in the conformed timeline). Task/Step selection is explicit ( |
Launcher (1 tool)
Tool | Description |
| Launch a DCC (Maya, Flame) scoped to a ShotGrid entity. OS-first discovery with the FPT-selected Software version authoritative over "newest installed". Maya routes through Toolkit |
RAG โ API Knowledge Engine (4 tools)
Tool | Description |
| Hybrid search across ShotGrid API documentation (ChromaDB + BM25 + HyDE + RRF). Returns relevant API patterns, correct filter syntax, and entity format examples. Called automatically before complex queries |
| Persist validated API patterns into the knowledge base. Model trust gates: Opus/Fable write directly, other models stage candidates for human review |
| Token usage statistics: calls, tokens in/out, RAG savings, cache hits, efficiency ratio, p_fallo |
| Zero the session counters immediately (manual companion to the 30-min idle auto-reset) |
Approach
Full ShotGrid API access via shotgun_api3 with no entity restrictions.
Toolkit path resolution
Projects with Advanced Setup (PipelineConfiguration exists):
The server queries the PipelineConfiguration entity from ShotGrid, reads the local roots.yml and templates.yml, and resolves publish paths using the project's real Toolkit config. This works with local configs, dev descriptors, and distributed configs. No hardcoded templates โ paths come from the actual tk-config.
Projects without Advanced Setup:
If no PipelineConfiguration is found, tk_publish asks for an explicit publish path. The file is copied to the given location and registered as a PublishedFile in ShotGrid. If the project has a Local File Storage configured (ShotGrid โ File Management โ Local File Storage), the path will be resolvable from the ShotGrid web UI. Without Local Storage, the path is still stored in the PublishedFile path field and accessible to any script or loader that reads it.
The tk_config.py module reads whatever Toolkit config is installed โ default, custom, or forked.
Launcher prerequisites
fpt_launch_app uses an OS-first resolver (software_resolver.py) to find the DCC binary on the local machine, then upgrades the launch to route through Toolkit's tank CLI when the project has an Advanced Setup PipelineConfiguration. On fresh machines, two one-time setup steps are required before the tool can launch a DCC in context:
1. Tank CLI authentication (per user, per site)
Toolkit's tank CLI has its own browser-based authentication, separate from the script key used by the ShotGrid Python API. The cached session expires periodically. On first use (or after expiry), you must run once interactively:
/path/to/PipelineConfiguration/tank <EntityType> <entity_id>The CLI will open a browser for Autodesk SSO, approve, and the session token is cached under ~/Library/Caches/Shotgun/<site>/. After that, all subsequent tank invocations โ including the ones fpt_launch_app spawns โ work non-interactively.
If you see an error like EOF when reading a line or Authentication ... expired when calling fpt_launch_app, your tank session needs a refresh via the manual step above.
2. bundle_cache_fallback_roots in pipeline_configuration.yml
Classic Advanced Setup configs created by setup_project expect bundles (engines, apps, frameworks) to live under <config>/install/engines/, <config>/install/apps/, etc. When the config was set up without running the bundle-cache step, or when it shares bundles with other projects via the global ShotGrid cache, the local install/ directory will only contain core/ and tank will fail with Cannot start engine! tk-shell v<X> does not exist on disk.
Fix by adding a fallback path to <config>/config/core/pipeline_configuration.yml:
pc_id: <project-pc-id>
pc_name: Primary
project_id: <project-id>
project_name: <project-name>
published_file_entity_type: PublishedFile
use_shotgun_path_cache: true
bundle_cache_fallback_roots:
- /Users/<you>/Library/Caches/Shotgun/bundle_cacheThis is an additive change: classic localized bundles under <config>/install/ still win when present; the fallback kicks in only for bundles that are not in the local install dir but exist in the global ShotGrid cache from a previous FPT Desktop sync.
3. Tank command naming convention
tk-multi-launchapp registers its launcher command under two common names depending on the pipeline:
launch_<app>โ the default when the pipeline exposes a single DCC version.<app>_<version>โ the convention when the pipeline registers one launcher per installed version (maya_2027,nuke_16.0v4, etc.).
fpt_launch_app prefers the version-specific form when the OS scan parses a version from the install path, and falls back to launch_<app> otherwise. Pipelines with yet another convention will need a wrapper that maps to the right tank command.
Flame context launch
Flame does not need the tank prerequisites above: by default (route="auto" or "direct") fpt_launch_app composes the direct CLI launch
/opt/Autodesk/flame_<ver>/bin/startApplication \
--start-project=<name> [--start-workspace=<ws> | --create-workspace] --closed-libswith three guard rails, in order:
Version: the FPT-selected
Software.version_namesentry wins over the newest local install (held-back versions are intentional); a warning names both when the selected version is not installed.Project mapping: the SG project name is slugified with tk-flame's exact convention (
re.sub(r"\W+", "_", name)) and validated against the projects that actually exist locally (Stone+Wiresw_listProjects, fallback/opt/Autodesk/projectscan). An unknown project is refused โ Flame errors on non-existent--start-projectnames โ withroute="toolkit"suggested, since the tk-flame route pre-creates missing projects via Wiretap.Single instance: if a Flame-family GUI is already running the launch is refused (Flame holds exclusive per-project locks);
force=trueoverrides explicitly.
route="toolkit" opts into the tank route (pipeline hooks + project auto-creation) and then the tank prerequisites above apply.
RAG โ Anti-hallucination Engine
fpt-mcp includes a hybrid Retrieval-Augmented Generation (RAG) system that provides Claude with verified ShotGrid API knowledge at query time, eliminating common hallucinations like invalid filter operators, incorrect entity reference formats, and wrong Toolkit template tokens.
Architecture
User query โ search_sg_docs tool
โ
โโโโโโโโโดโโโโโโโโ
โ HyDE Expander โ โ Adaptive: detects shotgun_api3 / Toolkit / REST
โโโโโโโโโฌโโโโโโโโ
โ
โโโโโโโโโโโโโผโโโโโโโโโโโโ
โ โ โ
ChromaDB BM25 Index In-session
(semantic) (lexical) Cache
โ โ
โโโโโโโฌโโโโโโ
โ
RRF Fusion (k=60)
โ
Top-N chunks + relevance scoreTechnology stack
Component | Technology | Purpose |
Vector DB | ChromaDB (persistent) | Semantic search with cosine similarity |
Embeddings | BAAI/bge-large-en-v1.5 | Document and query encoding (~570 MB model) |
Lexical search | BM25Okapi (rank_bm25) | Exact API method name matching |
Query expansion | HyDE (adaptive) | Generates domain-specific hypothetical code before embedding |
Rank fusion | RRF (k=60) | Combines semantic + BM25 rankings without score calibration |
Safety | 12+ regex patterns | Detects dangerous operations before execution |
Token tracking | Session stats | Measures tokens used vs saved by RAG, calculates efficiency |
Self-learning | learn_pattern + model gates | Grows the knowledge base from validated patterns |
Cache | In-session dict | Avoids redundant ChromaDB queries within a session |
Knowledge corpus
The RAG indexes three ShotGrid API reference documents covering distinct domains:
Document | Content | Size |
| shotgun_api3 Python SDK โ methods, filter operators by field type, entity format rules, anti-patterns | ~7 KB |
| Toolkit (sgtk) โ PipelineConfiguration discovery, template tokens (case-sensitive), descriptor types, path resolution | ~7 KB |
| REST API โ comparison table vs Python SDK, filter syntax differences | ~2.5 KB |
HyDE adaptive expansion
Unlike generic HyDE, fpt-mcp detects which API domain the query targets and generates a domain-specific hypothetical document:
Toolkit queries (template, publish path, roots.yml) โ generates
import sgtkcode skeletonREST API queries (oauth, bearer, endpoint) โ generates
import requestsHTTP skeletonDefault (most queries) โ generates
from shotgun_api3 import Shotgunskeleton
This produces embeddings closer to the relevant corpus section, improving retrieval precision.
Dangerous pattern detection
The safety.py module scans tool parameters before execution and blocks or warns about dangerous operations:
Bulk delete without specific IDs
Unfiltered search with no limit (returns entire database)
Entity reference format errors (int instead of
{type, id}dict)Path traversal in publish paths (
../)Schema modifications (field create/delete)
PublishedFile deletion (breaks Toolkit references)
Invalid filter operators (hallucinated by LLMs)
Large batch operations (>100 entities)
Incorrect template tokens
Building the RAG index
After installing dependencies, build the ChromaDB index from the documentation corpus:
# From the project directory, with venv activated:
source .venv/bin/activate
python -m fpt_mcp.rag.build_indexThis creates the persistent ChromaDB database and BM25 corpus.json. The first run downloads the BAAI/bge-large-en-v1.5 embedding model (~570 MB). The index only needs rebuilding when the documentation files in docs/ change.
Self-Learning
When search_sg_docs returns a low-relevance score (below 60%) but the operation succeeds, Claude can call learn_pattern to persist the working pattern into the knowledge base for future sessions. Model trust gates control who can write directly: only the two top cloud tiers โ Opus and Fable โ append the pattern to the docs (status appended_pending_index; it becomes retrievable on the next build_index). Every other model, including Sonnet and local Ollama models, is read-only and stages candidates in rag/candidates.json for human review before promotion. The allow-list lives in write_allowed_models in config.json (default ["claude-opus", "claude-fable"]).
Token Tracking
Every tool call tracks tokens consumed in and out. The session_stats tool reports the full session breakdown: total calls, tokens used, tokens saved by RAG (versus loading raw documentation), cache hits, patterns learned, and an efficiency ratio. This makes the RAG savings measurable and visible rather than implicit.
Transports
stdio (Claude Desktop / Claude Code)
Default mode. The server communicates via standard input/output as a subprocess.
python -m fpt_mcp.serverHTTP (inter-service, scripts)
Runs on a network port so Maya, Flame, and scripts can connect via TCP.
python -m fpt_mcp.server --http # port 8090 (default)
python -m fpt_mcp.server --http --port 9000 # custom portQt Console (native chat app)
Native PySide6 chat window that routes messages through Claude Code CLI. Replaces the browser-based AMI console with a proper desktop app.
Features:
Markdown rendering (bold, italic, code, headings, lists)
Dark theme matching ShotGrid aesthetic
Protocol handler (
fpt-mcp://) for direct launch from ShotGrid AMIsShotGrid entity context passed automatically via URL params
Light Payload support (fetches full context from EventLogEntry API)
No HTTP server dependency โ launches as a standalone app
Project context (zero silent defaults). The console resolves its ShotGrid project ONLY from the launch context. An AMI fired from within a project (an entity or project page) binds to that project authoritatively โ ShotGrid passes the page (
page_id), which the console resolves to the page's project โ sosg_create/sg_findtarget the project you are viewing. Launched from the global user menu or standalone, it has no project: at launch it detects your most-recent-activity project (from the ShotGrid event log), pins it for the session, and asks you to confirm or pick another before any create/update/delete/publish โ it never falls back to the.envproject. Changing project = relaunch the console (the project is a launch-time decision); for automatic binding, trigger the AMI from a page inside the target project.
Launch
# Direct
fpt-console
# With entity context
fpt-console --entity-type Shot --entity-id 456 --project-id 123
# Via protocol handler (from ShotGrid AMI or terminal)
open "fpt-mcp://chat?entity_type=Asset&selected_ids=123&project_id=456"ShotGrid AMI setup
Admin โ Action Menu Items โ Add:
Title: FPT Console
Entity types: Asset, Shot, Sequence, Version, Task (or any)
URL:
fpt-mcp://chat
ShotGrid automatically appends entity context parameters (entity_type, selected_ids, project_id, project_name, user_login) to custom protocol URLs. Do not add {placeholder} tokens โ they are only substituted for http:// and https:// URLs.
If Light Payload is enabled in the AMI configuration, ShotGrid sends only an event_log_entry_id instead of the full entity context. The Qt console detects this automatically and fetches the real entity context from the ShotGrid API via EventLogEntry.meta.ami_payload. This requires valid ShotGrid API credentials in .env.
After changing an AMI URL in ShotGrid, you may need to hard-refresh the browser (Cmd+Shift+R) to clear the cached AMI configuration.
When launched from an AMI, the entity context is displayed in the header badge and included in every message sent to Claude.
LLM backends
The console runs Claude Code CLI as a subprocess and lets you pick the model per session from the header dropdown. Three backend families are available:
Backend | Best suited for | Status |
Anthropic (Claude) โ Opus / Sonnet / Fable | Full pipeline and multi-tool agentic workflows (cross-MCP orchestration, multi-step publishes, large context) | Recommended (default) |
Local Ollama โ ๐ Mac-local ยท ๐ฅ LAN | Offline use and lightweight, single-domain requests | Experimental |
Note on local backends. The local Ollama options (๐ Mac-local, ๐ฅ LAN) are provided for offline and experimental use. The combined MCP tool inventory (fpt-mcp + maya-mcp + flame-mcp) together with the workflow system prompt requires a large context window, and complex multi-step tool routing benefits from a frontier model. For the full pipeline and any non-trivial agentic task we therefore recommend the Anthropic backend; local models are best kept to short, single-tool requests. Broader local-workflow support is an area of ongoing development.
Client configurations
Claude Desktop
Add to ~/Library/Application Support/Claude/claude_desktop_config.json:
{
"mcpServers": {
"fpt-mcp": {
"command": "/path/to/fpt-mcp/.venv/bin/python",
"args": ["-m", "fpt_mcp.server"],
"cwd": "/path/to/fpt-mcp",
"env": {
"SHOTGRID_URL": "https://yoursite.shotgrid.autodesk.com",
"SHOTGRID_SCRIPT_NAME": "your_script_name",
"SHOTGRID_SCRIPT_KEY": "your_key",
"SHOTGRID_PROJECT_ID": "123"
}
}
}
}The cwd field is required so the server can find the .env file and resolve relative paths correctly.
Claude Code
Claude Code uses two separate files for MCP configuration:
1. MCP server definitions โ ~/.claude.json (note: file in home dir, not inside ~/.claude/):
# Add the server via CLI (recommended):
claude mcp add fpt-mcp -s user -e SHOTGRID_URL=https://yoursite.shotgrid.autodesk.com -e SHOTGRID_SCRIPT_NAME=your_script_name -e SHOTGRID_SCRIPT_KEY=your_key -- /path/to/fpt-mcp/.venv/bin/python -m fpt_mcp.server
# Or edit ~/.claude.json manually:{
"mcpServers": {
"fpt-mcp": {
"command": "/path/to/fpt-mcp/.venv/bin/python",
"args": ["-m", "fpt_mcp.server"],
"env": {
"SHOTGRID_URL": "https://yoursite.shotgrid.autodesk.com",
"SHOTGRID_SCRIPT_NAME": "your_script_name",
"SHOTGRID_SCRIPT_KEY": "your_key"
}
}
}
}2. Tool permissions โ ~/.claude/settings.json:
{
"permissions": {
"allow": [
"mcp__fpt-mcp__sg_find",
"mcp__fpt-mcp__sg_create",
"mcp__fpt-mcp__sg_update",
"mcp__fpt-mcp__sg_schema",
"mcp__fpt-mcp__sg_upload",
"mcp__fpt-mcp__sg_download",
"mcp__fpt-mcp__sg_resolve_source",
"mcp__fpt-mcp__fpt_bulk",
"mcp__fpt-mcp__fpt_reporting",
"mcp__fpt-mcp__fpt_launch_app",
"mcp__fpt-mcp__tk_resolve_path",
"mcp__fpt-mcp__tk_publish",
"mcp__fpt-mcp__search_sg_docs",
"mcp__fpt-mcp__learn_pattern",
"mcp__fpt-mcp__session_stats",
"mcp__fpt-mcp__reset_session_stats"
]
}
}Important:
mcpServersmust be in~/.claude.json, NOT in~/.claude/settings.json. Thesettings.jsonfile is only for permissions and other settings. If you putmcpServersin the wrong file,claude mcp listwill not show the server.
The permissions.allow list auto-approves all fpt-mcp tools so Claude Code (and the Qt console, which uses Claude Code CLI internally) can call them without manual confirmation each time.
Cross-MCP orchestration (optional)
fpt-mcp works standalone, but when combined with other MCP servers in the same Claude session, Claude can orchestrate multi-tool workflows automatically. For example, with a DCC MCP server configured alongside fpt-mcp, Claude can query ShotGrid for asset data, download references, and register publishes โ all in a single conversation.
Autostart with launchd (macOS)
The setup_venv.sh script (legacy) handles launchd and Qt console setup:
Creates the venv and installs dependencies
Generates and installs the MCP server launchd plist (HTTP mode on port 8090)
Builds the Qt console .app bundle with protocol handler registration
Registers the protocol handler with macOS Launch Services
For most users, install.sh is the recommended entry point (handles venv, deps, RAG index, Claude Code registration, and tool permissions). Use setup_venv.sh only if you need launchd auto-start or the Qt console .app bundle.
./setup_venv.shManage the MCP server:
launchctl stop com.fpt-mcp.serverโ stoplaunchctl start com.fpt-mcp.serverโ startlaunchctl unload ~/Library/LaunchAgents/com.fpt-mcp.server.plistโ uninstall
Logs: /tmp/fpt-mcp.log and /tmp/fpt-mcp.err
Qt console logs: /tmp/fpt-console.log
Architecture
ShotGrid AMI click
โ fpt-mcp://chat (macOS appends entity params automatically)
โ macOS opens FPT-MCP Console.app (protocol handler via Apple Events)
โ QFileOpenEvent delivers the URL to the Qt app
โ If Light Payload: fetch real context from EventLogEntry API
โ Qt chat window with entity context badge
โ User types natural language
โ Claude Code CLI (claude -p "message" --output-format text)
โ Claude calls fpt-mcp tools via MCP (stdio)
โ ShotGrid API response
โ Markdown rendered in Qt chat windowProject Structure
fpt-mcp/
โโโ pyproject.toml # Package metadata and dependencies
โโโ install.sh # One-step installation script (venv, .env, RAG index, launchd, MCP registration)
โโโ setup_venv.sh # Venv setup; generates and loads the launchd plist at install time
โโโ .env.example # Environment variables template
โโโ .concepts.yml # Concept registry (cross-cutting invariants, strict mode)
โโโ .pre-commit-config.yaml # Pre-commit hooks (verify_concepts, verify_templates)
โโโ CHANGELOG.md # Keep a Changelog + SemVer
โโโ CLAUDE.md # Project context for Claude sessions
โโโ MODEL_STRATEGY.md # LLM backend strategy (cloud + local models)
โโโ LICENSE / NOTICE.md # License and third-party notices
โโโ docs/
โ โโโ DEPLOY.md # Reinstall recipes and deploy workflow
โ โโโ BUCKET_F_PLAN.md # server.py refactor plan (Bucket F)
โ โโโ O3_NEXT_SUGGESTED_ACTIONS.md # Chaining-hints design (next_suggested_actions)
โโโ scripts/
โ โโโ cut-release.sh # Canonical release script (the only supported release path)
โ โโโ verify_concepts.py # Concept-registry drift checker (pre-commit)
โ โโโ verify_templates.py # Toolkit templates vs TK_API.md checker (pre-commit)
โ โโโ check_adversarial_count.py # F3b precondition gate (adversarial test count)
โ โโโ invariant_types.py # Shared invariant engine types
โโโ src/
โ โโโ fpt_mcp/
โ โโโ __init__.py
โ โโโ server.py # MCP server entry point (FastMCP) โ tool registrations
โ โโโ shotgrid.py # Bodies of the direct SG tools + fpt_bulk dispatcher handlers
โ โโโ reporting.py # fpt_reporting dispatcher handlers
โ โโโ toolkit_tools.py # Bodies of tk_resolve_path and tk_publish
โ โโโ launcher.py # Body of the fpt_launch_app tool
โ โโโ rag_tools.py # Bodies of search_sg_docs and learn_pattern
โ โโโ client.py # ShotGrid API client wrapper
โ โโโ filters.py # ShotGrid filter validation and safety constants
โ โโโ models.py # Pydantic input models for every MCP tool (extra="forbid")
โ โโโ safety.py # Safety module โ blocks dangerous write patterns
โ โโโ software_resolver.py # DCC discovery for fpt_launch_app (OS-first cascade)
โ โโโ suggestions.py # Per-tool chaining hints (next_suggested_actions)
โ โโโ tk_config.py # Toolkit config loader (PipelineConfiguration discovery)
โ โโโ _session_stats.py # Session reset + F0 telemetry
โ โโโ ami/
โ โ โโโ handler.py # AMI URL protocol handler (fpt-mcp://)
โ โ โโโ console.html # AMI console HTML template
โ โโโ qt/
โ โ โโโ app.py # Qt application entry point
โ โ โโโ chat_window.py # Chat window widget
โ โ โโโ claude_worker.py # Claude subprocess worker (visible-progress streaming, canonical)
โ โ โโโ build_app_bundle.py # macOS .app bundle builder (registers the fpt-mcp:// URL scheme)
โ โโโ rag/
โ โ โโโ build_index.py # RAG index builder (run to rebuild)
โ โ โโโ config.py # RAG configuration (chunk size, model)
โ โ โโโ corpus.json # Parsed documentation corpus
โ โ โโโ search.py # Hybrid search (ChromaDB semantic + BM25 + HyDE + RRF)
โ โ โโโ index/ # auto-generated (ChromaDB vector store)
โ โโโ docs/
โ โ โโโ REST_API.md # ShotGrid REST API documentation corpus
โ โ โโโ SG_API.md # ShotGrid Python API documentation corpus
โ โ โโโ TK_API.md # Toolkit API documentation corpus
โ โโโ skills/
โ โโโ asset-creation/
โ โโโ SKILL.md # Claude skill for asset creation workflows
โโโ tests/ # Mock suites + golden transcripts + real-index guards
โโโ conftest.py
โโโ fixtures/ # Mock Toolkit templates and fixtures
โโโ golden/ # Golden transcripts (determinism guards)No machine-specific files in the repo. The launchd plist is not a tracked file:
setup_venv.shwrites~/Library/LaunchAgents/com.fpt-mcp.server.plistat install time, deriving every path from wherever the repo was cloned ($FPT_DIRauto-detected,$HOMEexpanded by the shell). launchd requires absolute paths, so the installed plist is machine-local by design โ it never enters version control. Thefpt-mcp://AMI URL handler is registered by the Qt.appbundle (qt/build_app_bundle.py), not via launchd.
Troubleshooting
Connection refused on ShotGrid API
Verify
SHOTGRID_URLandSHOTGRID_SCRIPT_KEYin.envCheck that the Script Application is active in ShotGrid Admin โ Scripts
Test connectivity:
curl -s https://YOUR_SITE.shotgrid.autodesk.com/api/v1
RAG index not found
Run
python -m fpt_mcp.rag.build_indexto rebuildCheck that
docs/directory contains the ShotGrid API documentation corpus
Toolkit path resolution fails
Verify that a PipelineConfiguration entity exists for the project in ShotGrid
Check
roots.ymlandtemplates.ymlpaths in the PipelineConfiguration'sdescriptorfieldFor distributed configs, only
devdescriptor type is currently supported
Ecosystem
fpt-mcp is part of a four-component VFX pipeline. Each component has a defined role:
Repo | Role |
Controls Autodesk Flame for compositing, conform, and finishing | |
Controls Autodesk Maya for 3D modeling, animation, and rendering | |
Connects to Autodesk Flow Production Tracking (ShotGrid) for production tracking, asset management, and publishes | |
GPU inference server for AI-powered 3D generation โ the remote backend for maya-mcp's image-to-3D and text-to-3D tools |
fpt-mcp is the production backbone of the pipeline. It provides asset metadata, task assignments, path resolution, and publish registration for the other tools. maya-mcp and flame-mcp both consume fpt-mcp data โ Maya for asset context and publish targets, Flame for shot and sequence lookup. vision3d has no direct connection to fpt-mcp.
License
Available Tools
18 toolscut_to_edlA
Generate a CMX 3600 EDL from a ShotGrid Cut + CutItems (drives Flame's native Conform). Source ranges = cut_item_in + cut_item_duration; record positions = edit_in over the Cut's base timecode; FROM CLIP NAME = latest per-shot publish of clip_publish_type.
| Name | Required | Description | Default |
|---|---|---|---|
| params | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries the full burden of disclosure. It explains source range and record position formulas and how FROM CLIP NAME is derived, but does not state potential side effects, permissions, error behavior, or return format. The computational detail adds transparency but leaves safety and lifecycle aspects ambiguous.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single dense sentence with useful semicolon-separated details. It wastes no words, though the density makes it slightly harder to parse than a more structured two-sentence layout.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the tool's moderate complexity and the presence of an output schema, the description covers the key algorithmic behavior (ranges, record positions, naming) and the Flame-conform context. It does not explain what the tool returns, but that is not required since an output schema exists. It lacks only explicit usage boundaries.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The description adds meaning for clip_publish_type by explaining it drives FROM CLIP NAME, and implies cut_id and output_path through the EDL generation context. However, schema description coverage is 0%, so the description should compensate more thoroughly; it under-specifies output_path and cut_id and does not mention they are required.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool's function: 'Generate a CMX 3600 EDL from a ShotGrid Cut + CutItems' and notes it drives Flame's native Conform. This specific verb+resource pairing distinguishes it from sibling tools like sg_find or tk_publish.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides clear context for when this tool is relevant (generating EDLs for Flame conform from ShotGrid cuts) but does not explicitly mention alternatives or exclusions. It implies usage for editing workflows without stating when not to use it.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
fpt_bulkA
Execute bulk/destructive ShotGrid operations.
Available actions:
โข delete โ Retire (soft-delete) an entity. Can be restored from trash. Required params: {"entity_type": "Shot", "entity_id": 123} โข revive โ Restore a previously retired entity. Required params: {"entity_type": "Shot", "entity_id": 123} โข batch โ Execute multiple operations in a single transactional call (ALL succeed or ALL fail). Required params: {"requests": "[{"request_type": "create", "entity_type": "Shot", "data": {"code": "SH010", "project": {"type": "Project", "id": 123}}}]"} โข editorial โ Deterministically create a Cut + one CutItem per shot (cumulative edit ranges, source ranges, handles computed in Python โ no hand math). Required params: {"cut": {"entity": {"type": "Sequence", "id": 42}, "code": "SEQ01_v3", "fps": 24.0}, "shots": [{"shot": {"type": "Shot", "id": 1}, "duration": 100}]}. Optional cut keys: source_start_frame (default 1001), handles (default 0), revision_number.
| Name | Required | Description | Default |
|---|---|---|---|
| params | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The description discloses critical behaviors: delete is soft-delete (restorable), batch is transactional (all-or-nothing), editorial is deterministic with computed edit ranges. With no annotations, this provides full transparency.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is efficiently structured with a leading sentence and bullet points for each action. Every sentence adds value without redundancy.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the tool's complexity (multi-action dispatch) and that an output schema exists (not shown but indicated), the description adequately covers input parameters, behaviors, and usage for all four actions.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The input schema has 0% description coverage, but the tool description compensates with detailed parameter examples for each action (e.g., exact JSON objects for delete, batch, editorial). It adds meaning beyond the enum and freeform object.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states 'Execute bulk/destructive ShotGrid operations' and enumerates four specific actions (delete, revive, batch, editorial). It differentiates from sibling tools like sg_create or sg_find by focusing on bulk/destructive operations.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Each action is described with its purpose and required parameters, implicitly guiding when to use each (e.g., delete for soft-deletion, batch for transactional multiple ops). The context of sibling tools further clarifies that this is for bulk/destructive tasks.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
fpt_launch_appA
Launch a DCC application scoped to a ShotGrid entity.
Discovery is OS-first: if the app is not installed on this machine the
tool fails immediately without consulting ShotGrid. When the owning
project has an Advanced Setup PipelineConfiguration whose tank CLI
is reachable on disk, the launch is routed through tank so Toolkit
pre-launch hooks run and the app opens in the correct context.
Otherwise the tool falls back to a direct open -a launch and
surfaces a warning โ the app still opens, but without context
injection from Toolkit.
Version selection: the FPT-selected version (SG Software
version_names) is authoritative over "newest installed"; a
warning names both when the selected one is not installed locally.
MAYA / Sequence: a bare Sequence launch is step-LESS (no work
templates); the tank route resolves it to its Step Task (step
param, default Layout) so Maya boots the sequence_layout env.
FLAME (route='auto'/'direct'): NATIVE-LINK DISCOVERY drives the launch (Chat 93). The tool reads each local project's stored FPT link (shotgunProjectName, from the project metadata clib on disk โ the 1:1 native relation): exactly one linked to this FPT project โ opens it directly (payload fpt_linked=true); several โ INCONSISTENT error (break the wrong project's link from Flame's own FPT menu); none โ choice_required with the local list (each project's link included) โ ask the user and re-call with flame_project=. Links are CREATED and BROKEN only from Flame's own Flow Production Tracking menu: flame-mcp's fpt_link merely reports the link (its write path was removed in Chat 98 โ it triggered Flame's error report in-vivo). "already running" refusal: single-instance + project locks (close it or force=true).
Common failure modes to explain to the user if they surface:
error: "... is not installed ..."โ the DCC binary is not under the expected install path. Tell the user to install it and retry.Popen succeeds but the launched process dies immediately with a tank message like
EOF when reading a lineorAuthentication ... expired. This means the ToolkittankCLI lost its cached session. The user must run<PipelineConfiguration>/tank <Entity> <id>once in an interactive terminal, authenticate via the browser, and retry. The tool cannot do this because it cannot deliver the browser approval step.Popen succeeds but tank errors with
does not exist on diskfor an engine (e.g.tk-shell v0.10.2). The pipeline config expects bundles under<config>/install/which are absent. Suggest the user addbundle_cache_fallback_rootspointing to~/Library/Caches/Shotgun/bundle_cachein the config'spipeline_configuration.yml.
| Name | Required | Description | Default |
|---|---|---|---|
| params | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries the full burden โ and it delivers: it discloses the degraded fallback path ('falls back to a direct open -a launch and surfaces a warning'), side effects ('can CREATE a missing Flame project'), the 'already running' single-instance refusal with its force override, and three fully documented failure modes with root causes and remediation steps. It even discloses an architectural limitation ('The tool cannot do this because it cannot deliver the browser approval step'). The Chat 93/98 references indicate provenance and that the FLAME write path was deliberately removed, preempting confusion about missing functionality. No contradictions with annotations exist since none are present.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The structure is excellent: front-loaded purpose, then clearly delineated sections (OS-first, version selection, MAYA/Sequence, FLAME, refusal, failure modes) using a scannable headerless markdown format. Every section earns its place for a tool of this complexity, and the failure-mode catalog is dense with load-bearing knowledge rather than fluff. However, inline references like 'Chat 93' and 'Chat 98' are historical noise for a fresh agent, and the step-parameter explanation appears in both the description and the schema, creating slight redundancy. It could shed 10% of its bulk (especially the Chat references) without loss.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a 10-parameter, multi-DCC tool with three routing modes and an interactive discovery protocol, this description is exceptionally complete: purpose, scope, routing fallbacks, precedence rules, per-DCC behavior, interaction loop, overrides, explicit failure taxonomy, and user-facing remediation โ everything is present. An agent facing an auth-expiry or bundle_cache_fallback_roots error would be able to diagnose and communicate the issue without ever seeing the real failure. With an output schema present, the absence of return-value details is correct, not a gap.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Despite 0% schema coverage, the description deeply enriches the highest-complexity parameters: step ('a bare Sequence launch is step-LESS... resolves it to its Step Task'), route ('for flame this runs pre-launch hooks and can CREATE a missing Flame project'), and flame_project (link discovery and the 1:1/INCONSISTENT/none semantics). Parameters like dry_run, workspace, and force are left entirely to the schema's own detailed descriptions, which is acceptable for the low-ambiguity ones but slightly asymmetric with the depth given to others. The description focuses its limited compensation budget exactly where parameter semantics are non-obvious.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The opening sentence โ 'Launch a DCC application scoped to a ShotGrid entity' โ provides a specific verb (launch), a specific resource type (DCC application), and a clear scope (ShotGrid entity), which cleanly distinguishes it from the querying/uploading/publish siblings in its list. The 'scoped to a ShotGrid entity' phrasing conveys the same scope-narrowing quality as the get_calls HIGH example's 'in date range' qualifier. Purpose is instantly graspable with no ambiguity.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Massively explicit: describes the internal route selection ('auto' prefers toolkit; 'direct' skips it; 'toolkit' forces pre-launch hooks), the choice_required protocol ('ask the user and re-call with flame_project=<choice>'), and the precedence rule ('FPT-selected version... is authoritative over newest installed'). The list_projects schema description adds 'Use after list_projects/choice_required' and the critical exclusion 'never guess: a name-derived match is NOT evidence of a native FPT link'. The FLAME decision tree (one link โ open directly; several โ INCONSISTENT; none โ choice_required) functions as explicit when/when-not guidance.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
fpt_reportingA
Search, aggregate, and inspect ShotGrid data for reporting and analysis.
Available actions:
โข text_search โ Full-text search across multiple entity types at once. Required params: {"text": "search terms", "entity_types": "{"Asset":[], "Shot":[["sg_status_list","is","ip"]]}"} Optional: {"limit": 10} โข summarize โ Server-side aggregation (count, sum, avg, min, max) with optional grouping. Required params: {"entity_type": "Task", "filters": "[["sg_status_list","is","ip"]]", "summary_fields": "[{"field": "duration", "type": "sum"}]"} Optional: {"grouping": "[{"field": "sg_status_list", "type": "exact"}]"} โข note_thread โ Read the full reply thread of a Note. Required params: {"note_id": 123} โข activity โ Read the activity stream for an entity. Required params: {"entity_type": "Shot", "entity_id": 456} Optional: {"limit": 20}
| Name | Required | Description | Default |
|---|---|---|---|
| params | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description must fully disclose behavioral traits. It implies read-only operations ('Search, aggregate, and inspect') but does not explicitly state safety, destructive effects, authentication needs, or rate limits. The lack of explicit safety guarantees is a significant gap.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is well-structured with bullet points for each action. It is concise, contains no filler, and every sentence adds value. The front-loading of the overall purpose is effective.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the dispatch pattern and presence of an output schema, the description covers the main functionality: four actions with parameter examples. It does not explain return format (output schema covers that), but could mention error handling or edge cases. Overall, it is reasonably complete.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, but the description compensates by providing detailed required and optional parameters for each action (e.g., text_search: required 'text' and 'entity_types', optional 'limit'). This adds significant value beyond the schema's bare structure.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states 'Search, aggregate, and inspect ShotGrid data for reporting and analysis.' It lists four specific actions with brief explanations, distinguishing it from sibling tools that handle individual CRUD operations (sg_find, sg_update, etc.). The verb set is specific and actionable.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Each action includes a one-line description of when to use it (e.g., 'Full-text search across multiple entity types', 'Server-side aggregation'). The tool is positioned for reporting/analysis, but no explicit exclusions or alternatives to siblings are given. The guidance is clear for the available actions.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
learn_patternA
Save a validated working pattern to the RAG knowledge base.
Call this after a successful operation when search_sg_docs returned low relevance (< 60%), indicating the pattern was not well-documented. The pattern will be available in future sessions.
Model trust gates: only Opus/Fable can write directly. Other models stage candidates for review.
| Name | Required | Description | Default |
|---|---|---|---|
| params | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Discloses that patterns are saved for future sessions and mentions model trust gates (only Opus/Fable can write directly). No annotations exist, so the description fully handles disclosure. It does not detail what happens on duplicate patterns or error conditions.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Five sentences, each serving a distinct purpose: (1) core action, (2) triggering condition, (3) benefit, (4-5) model trust gates. No redundant information.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Covers key context: when to use, what it does, model restrictions, and data persistence. An output schema exists (not shown), so return values need not be described. Lacks details on idempotency or error handling but sufficient for typical usage.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The input schema already includes descriptions for each property (api, code, description), covering semantics. The description does not add further information about parameters, so it meets the baseline for schema-covered parameters.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the action ('Save a validated working pattern') and the target ('RAG knowledge base'). It distinguishes from siblings by specifying that this tool is used after search_sg_docs returns low relevance.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explicitly defines when to use: 'after a successful operation when search_sg_docs returned low relevance (< 60%)'. It also provides model-specific guidance about write permissions. However, it does not explicitly state when NOT to use or mention alternatives beyond the implicit condition.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
openclip_createA
Write a versioned Flame Open Clip (.clip) for a shot's published render sequences: one feed per publish version (frame ranges read from disk), current = highest. Gives a conformed Flame timeline Source Versions; regenerate after each new publish version. Generation runs Autodesk's canonical dl_get_media_info per version dir + merges the documents (requires a Flame/mio install on this host โ Flame 2027 silently rejects hand-rolled minimal XML, validated in-vivo 2026-08-05).
Task/Step selection (zero silent defaults): pass task_id (or step = Step code/short_name) to build. With neither it returns choice_required with candidate Tasks (+ Task.upstream_tasks suggestion) โ confirm with the user, re-call. Never assumes which step feeds the conform.
| Name | Required | Description | Default |
|---|---|---|---|
| params | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Even without annotations, the description fully discloses its behavior: it requires a Flame/mio install, warns about Flame 2027 rejecting hand-rolled XML, explains that deprecated parameters are ignored, explicitly states the tool never builds when task/step are omitted, and describes multi-step aggregation quirks (e.g., skipping empty steps, precedence rules). It even notes the keep_source_current workaround for a Flame behavior it measured in-vivo. This goes far beyond what annotations would typically provide.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is dense and front-loaded, starting with the core purpose and then adding nuance. However, it is long and includes inline anecdotal details (Chat 98/99, in-vivo) that, while valuable, could be slightly condensed without losing meaning. Still, every sentence earns its place, covering critical non-obvious constraints and edge cases.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the tool's complexity (multiple selection modes, aggregation, deprecated fields, external dependencies, Flame version quirks) and the lack of annotations, the description is remarkably complete. It covers the prerequisites (Flame/mio install), the return behavior (choice_required), the failure modes (skipped steps, Flame rejection), and even the rationale for defaults. The output schema exists, so return-value details are not needed here. This is exceptionally thorough.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0% per the context signals, though the schema descriptions are actually rich internally. However, the tool description adds a lot of semantic meaning to parameters: it explains the interplay of task_id/step/steps, precedence rules, the deprecated fps and clip_name, and the extra_publish_types' purpose. It clarifies what step matching does and the terminal behavior for omitted selectors. This far exceeds what the schema alone provides, especially since the description uses these parameters in orchestration narratives (Chat 98/99, in-vivo observations).
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a specific verb and resource: 'Write a versioned Flame Open Clip (.clip) for a shot's published render sequences'. It clearly distinguishes this from siblings by framing it as a generation tool for Flame conform, not a generic SG/find/create/update tool. It also specifies the output is a versioned clip with one feed per publish version, which is a unique purpose.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description explicitly states 'Task/Step selection (zero silent defaults): pass task_id (or step = Step code/short_name) to build. With neither it returns choice_required... confirm with the user, re-call. Never assumes which step feeds the conform.' This provides explicit when-to-use versus alternatives: it explains the tool refuses to guess and requires the caller to select a task/step, and even offers a suggestion for choosing among candidates. It also states the necessity to regenerate after each new publish version.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
reset_session_statsA
Zero the session stats counters immediately.
Use at the start of a new Claude session (or a fresh debugging run) when the idle-based auto-reset has not fired โ for example when two sessions happen back-to-back. Returns a confirmation line with the new reset timestamp.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations provided, so description carries full burden. It discloses immediate zeroing, reset of counters, and return of confirmation timestamp. Missing explicit statement that it is destructive (clears data irreversibly), but 'Zero' sufficiently implies mutation.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Three precise sentences front-loaded with the action. Every sentence earns its place: action, usage context, return value. No wasted words.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given zero parameters and output schema existence, description fully captures behavior: immediate reset, use case, and return value. Complements schema and context signals.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
No parameters; baseline 4 applies. Description adds no parameter info, but none is needed as the schema is empty and coverage is 100%.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
Description clearly states the action: 'Zero the session stats counters immediately.' It uses specific verb 'Zero' and resource 'session stats counters', distinguishing it from the sibling 'session_stats' which presumably reads stats.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explicitly states when to use: 'at the start of a new Claude session (or a fresh debugging run) when the idle-based auto-reset has not fired'. Provides a concrete example (back-to-back sessions) and contrasts with alternative behavior (auto-reset).
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
search_sg_docsA
Search ShotGrid API documentation using hybrid RAG (semantic + BM25).
Call this BEFORE writing complex queries, using unfamiliar filters, or when unsure about entity format, template tokens, or operator names. Returns the most relevant documentation chunks with relevance scores.
Covers three APIs: shotgun_api3 (Python SDK), Toolkit (sgtk), REST API. Uses HyDE query expansion + Reciprocal Rank Fusion for high precision.
| Name | Required | Description | Default |
|---|---|---|---|
| params | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Description mentions HyDE expansion and Reciprocal Rank Fusion for high precision. No annotations provided, so adequate but lacks details on rate limits, auth, or edge cases.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Three sentences that front-load purpose, then guidelines, then returns. No wasted words, highly efficient.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Simple tool with output schema present; description covers return value ('most relevant documentation chunks with relevance scores') and scope (three APIs). Fully adequate.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is high (parameter descriptions present), so description adds limited extra meaning beyond examples and context. Baseline 3 is appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states 'Search ShotGrid API documentation' as the verb-resource pair, and distinguishes from siblings which are data manipulation or reporting tools. The hybrid RAG method is explicit.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explicit guidance on when to use: before writing complex queries, with unfamiliar filters, or uncertainty about format. Clear context but no when-not-to-use or alternative tools.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
session_statsA
Show session efficiency statistics: token usage, RAG savings, patterns learned.
Call at the end of multi-step tasks or when asked about efficiency. Shows how much context was saved by RAG vs loading full documentation.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries full burden, describing output details like RAG savings compared to full documentation, implying a read-only statistics tool.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Three concise sentences with front-loaded purpose, usage guidance, and output detail; no wasted words.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given zero parameters and presence of output schema, description fully covers when to use and what information is provided, including specific RAG comparison.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
No parameters, baseline 4. Description adds context about what statistics are displayed, compensating for lack of param info.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool shows session efficiency statistics (token usage, RAG savings, patterns learned), distinguishing it from siblings like reset_session_stats and learn_pattern.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explicitly says to call at the end of multi-step tasks or when asked about efficiency, providing clear usage context, though it doesn't specify when not to use.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
sg_createA
Create any entity in ShotGrid.
Works with ALL entity types. Project is auto-linked if SHOTGRID_PROJECT_ID is set and 'project' is not in the data dict.
| Name | Required | Description | Default |
|---|---|---|---|
| params | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Without annotations, the description carries full burden. It discloses the auto-linking behavior, which is valuable. However, it does not mention side effects, permissions, or error handling. The description adds some behavioral insight but not comprehensive.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two concise sentences that front-load the core purpose. No unnecessary words, every sentence earns its place.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
The description is complete enough for a generic create tool, given the presence of an output schema. It mentions the special auto-linking behavior and covers the main purpose. It could optionally detail the return value, but that is handled by the output schema.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The schema already provides good descriptions for both parameters. The tool description adds value by reinforcing the auto-linking condition and emphasizing that all entity types are supported, which complements the schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the action ('Create any entity in ShotGrid') and the resource ('any entity'). It distinguishes from sibling tools like sg_find and sg_update by emphasizing that it works with ALL entity types.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides clear context (works with all entity types, auto-links project) but does not explicitly state when not to use or mention alternatives. It implies usage for creation only.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
sg_downloadB
Download an attachment from any entity field in ShotGrid.
| Name | Required | Description | Default |
|---|---|---|---|
| params | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description must disclose behavioral traits. It only states 'download an attachment' without mentioning side effects (e.g., writing to local filesystem, potential overwriting), required permissions, or error conditions. For a tool that mutates the local filesystem, this is insufficient transparency.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single sentence of 9 words, efficiently conveying the core purpose without any extraneous information. It is front-loaded and easy to parse.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given that the output schema exists and parameter descriptions are in the schema, the description adequately states the tool's function. However, it lacks context about behavioral expectations (e.g., file overwrite behavior, error handling) that would make it more complete for an AI agent.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The input schema already provides brief descriptions for each parameter (entity_type, entity_id, download_path, field_name). The tool description does not add further meaning or clarify parameter usage beyond what the schema offers. Since schema coverage is high, a baseline score of 3 is appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool downloads an attachment from any entity field in ShotGrid, using a specific verb ('download') and resource ('attachment from any entity field'). It distinguishes itself from sibling tools like sg_upload (upload) and sg_find (find entities), which have different purposes.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides no guidance on when to use this tool versus alternatives, such as sg_find for metadata retrieval or sg_upload for uploading. There is no mention of prerequisites, when to avoid using it, or how it fits into a workflow.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
sg_findB
Search for any entity in ShotGrid with filters.
Works with ALL entity types: Asset, Shot, Sequence, Version, Task, Note, PublishedFile, HumanUser, Project, Playlist, TimeLog, CustomEntity01-30, etc.
Filter syntax follows ShotGrid API: [["field", "operator", value], ...] Operators: is, is_not, contains, not_contains, starts_with, greater_than, less_than, in, between, etc.
| Name | Required | Description | Default |
|---|---|---|---|
| params | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description must cover behavioral traits. It correctly implies a read-only search operation, but does not explicitly state non-destructiveness, authentication needs, or any side effects. Minimal disclosure beyond the basic action.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is two sentences plus a list of operators, efficiently conveying scope and syntax. It front-loads the purpose. Minor improvement: could be more compact without the list, but overall concise.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
An output schema exists (not shown) which likely documents return values, so description need not cover that. However, the description omits details like pagination (limit mentioned only in schema) and error behavior. Still adequate for a search tool with well-structured input schema.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The input schema already provides detailed descriptions for all parameters (limit, order, fields, filters, entity_type, add_project_filter), so the description adds little new value. It repeats the filter syntax and entity type list, but those are already in the schema. Baseline 3 is lowered due to redundancy and lack of additional semantic clarity.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the action ('Search') and resource ('any entity in ShotGrid'). It lists numerous entity types, distinguishing it from sibling tools that create, update, or download. No other sibling tool provides generic search, making purpose highly distinct.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description implies the tool is for searching all entity types and provides filter syntax, but lacks explicit guidance on when to use it vs. alternatives. No sibling alternatives for search exist, so the omission is less critical, but still no 'when not to use' or 'prerequisites' are stated.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
sg_resolve_sourceA
Resolve the best generation input (image or description) for an Asset.
Ranks linked Version stills + the Asset thumbnail/description by priority
(image > text; video deferred) and returns resolved (downloaded when
download_path is given), requires_choice (several images tie โ call
again with choice), text_only, or no_source. Shared by the
World Labs and Vision3D entry flows; logic lives in source_resolver.py.
| Name | Required | Description | Default |
|---|---|---|---|
| params | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries full burden and effectively discloses the ranking priority (image > text; video deferred), return types (resolved, requires_choice, etc.), and the two-phase process. However, it does not detail error handling or side effects beyond the download path.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is concise, with a clear first sentence followed by a concise explanation of the ranking and return values. Every sentence adds value, and there is no redundant information.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the tool has multiple phases and return types, the description covers the core logic and outcomes. The presence of an output schema (context signal) means it doesn't need to detail return structure, but the description could still benefit from clarifying when download_path is required or optional.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The input schema already provides detailed descriptions for all parameters (asset_id, choice, text_prompt, download_path). The description adds moderate context by explaining the two-phase workflow and the use of 'choice', but does not elaborate on how text_prompt or download_path behave beyond what the schema states.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the verb 'Resolve' and the resource 'generation input for an Asset', differentiating it from sibling tools like sg_create or sg_find. It specifies the ranking logic and possible outcomes, making the purpose unmistakable.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description implies usage for resolving source media but does not explicitly state when to use this tool over alternatives like sg_find. It describes the return values but lacks guidelines on prerequisites or when not to use it.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
sg_schemaA
Get the field schema for any ShotGrid entity type.
Returns field names, types, and properties. Use this to discover what fields are available before querying or creating entities.
| Name | Required | Description | Default |
|---|---|---|---|
| params | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description is the sole source of behavioral info. It states it is a read operation returning schema, but omits details on permissions, rate limits, or side effects. Adequate but not comprehensive.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is two sentences, front-loaded with the action and result. No redundant information; every sentence adds value.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the output schema is present, the description does not need to detail return values. It covers purpose, usage, and scope (any entity type). Minor gap: no mention of example entity types, but adequate.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The description does not add meaning beyond what the input schema already provides for each parameter. Since the schema has clear descriptions for 'entity_type' and 'field_name', a baseline score of 3 is appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states it retrieves the field schema for any ShotGrid entity type and returns field names, types, and properties. It distinguishes itself from sibling tools, none of which focus on schema discovery.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides explicit context: use this to discover fields before querying or creating entities. It lacks explicit 'when not to use' but is sufficient for selection.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
sg_updateB
Update any entity's fields in ShotGrid.
| Name | Required | Description | Default |
|---|---|---|---|
| params | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The description does not disclose behavioral traits beyond the basic action. No annotations are provided to compensate. It does not mention idempotency, permissions, side effects, or response format. For a mutation tool, this is insufficient.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single short sentence, making it concise, but it lacks important details such as parameter hints or usage notes. It is front-loaded but under-specified.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the tool's complexity (updates any entity type, three parameters, no output schema details), the description is incomplete. It does not cover return values, success/failure behavior, or constraints.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The input schema has detailed descriptions for all three parameters (entity_type, entity_id, data), including an example for data. The main description does not add any parameter information beyond the schema, so baseline 3 is appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description 'Update any entity's fields in ShotGrid' clearly states the verb 'update' and the resource 'entity fields in ShotGrid'. It distinguishes from sibling tools like sg_create (create), sg_find (find), etc.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides no usage context, such as when to use this tool versus alternatives (e.g., sg_create for creation, sg_find for reading). There is no guidance on prerequisites or exclusions.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
sg_uploadA
Upload a file to any entity field in ShotGrid.
Use field_name='image' for thumbnails, 'sg_uploaded_movie' for movies, or any file/url field.
| Name | Required | Description | Default |
|---|---|---|---|
| params | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Without annotations, the description fails to disclose side effects (e.g., overwrite behavior), authorization requirements, or file size limits. Simply stating 'Upload' is insufficient for behavioral transparency.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two sentences with no redundancy. The purpose is front-loaded, and each sentence adds specific guidance. Ideal conciseness.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
While output schema is present, the description omits details on required parameters entity_type and entity_id, and ignores display_name. For a tool with 5 parameters and no annotations, this is incomplete.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The description adds valuable context to the field_name parameter with concrete examples ('image', 'sg_uploaded_movie'), and hints that other file/url fields are possible. However, it does not elaborate on entity_type, entity_id, or display_name beyond the schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the action ('Upload') and resource ('file to any entity field in ShotGrid'), and provides examples for field_name, distinguishing it from sibling tools like sg_download or sg_create.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No explicit guidance on when to use sg_upload versus alternatives like sg_create or sg_update. The description only hints at field usage but does not define usage boundaries or prerequisites.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
tk_publishA
Publish a file to ShotGrid.
Two modes:
With PipelineConfiguration: resolves the publish path from Toolkit templates automatically (use tk_resolve_path first to preview the path).
Without PipelineConfiguration: requires an explicit publish_path parameter. The path is stored in the PublishedFile and is accessible by any tool that reads the path field. If the project has a Local File Storage configured in ShotGrid, the file will be browsable from the web UI.
| Name | Required | Description | Default |
|---|---|---|---|
| params | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full burden. It discloses path storage, browsability with Local File Storage, auto-creation of publish type, and auto-derivation of step/entity. However, it lacks details on idempotency and overwrite behavior.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is concise with two clear paragraphs, front-loading the purpose and then explaining modes. Every sentence adds value, and there is no redundant information.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the tool's complexity (multiple parameters, two modes, interaction with Toolkit templates), the description covers key aspects like mode differentiation and path handling. It is sufficient for effective use, especially with the detailed input schema and presence of an output schema.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Although the context signals indicate 0% schema coverage, the actual schema has rich descriptions for each parameter. The tool description adds context about modes but does not supplement parameter details beyond what the schema provides, leading to a baseline score of 3.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states 'Publish a file to ShotGrid' and distinguishes two modes of operation, making the verb and resource specific. It differentiates from sibling tools by focusing on publishing, which is a distinct action among the listed siblings.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description explains when to use each mode (with or without PipelineConfiguration) and suggests using tk_resolve_path first for the former. It provides clear context but does not explicitly exclude alternatives like sg_create.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
tk_resolve_pathA
Resolve a Toolkit publish path using the project's PipelineConfiguration.
Reads the PipelineConfiguration from ShotGrid, loads templates.yml, and resolves the full file path. Requires the project to have an Advanced Setup with a PipelineConfiguration entity.
Use search_sg_docs to find available template names for the project's config.
| Name | Required | Description | Default |
|---|---|---|---|
| params | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries full burden. It discloses that it reads PipelineConfiguration from ShotGrid, loads templates.yml, and requires Advanced Setup. No contradictions.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Three sentences, each adding clear value: purpose, process, and usage tip. No wasted words, well-structured and front-loaded.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the tool complexity and presence of an output schema, the description adequately covers prerequisites (Advanced Setup) and process. Does not need to explain return values.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The input schema already contains detailed descriptions for all parameters (despite context signal indicating 0% coverage), so the description adds minimal additional meaning. The tip about using search_sg_docs for template_name adds some value.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool resolves a Toolkit publish path using the project's PipelineConfiguration, with specific verbs and resource. It differentiates from sibling tools like search_sg_docs by its core function.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explicitly directs to use search_sg_docs to find template names, providing an alternative for finding available templates. However, it does not explicitly state when not to use this tool.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
Tool Schema Changelog
Recent tool additions, removals, and schema changes observed during successful MCP inspections.
2 tool updates
v1.27.0- Changed
fpt_launch_app1 field changed- changed
Input schema / $defs / FptLaunchAppInput / properties / flame_project / descriptionPrevious value: -"Flame only: EXPLICIT local Flame project to open (case-insensitive), overriding the name derived from the SG project. Use after list_projects/choice_required โ the native FPT link workflow opens the project the user chose, then verifies/sets the link via flame-mcp's fpt_link tool."New value: +"Flame only: EXPLICIT local Flame project to open (case-insensitive), overriding the name derived from the SG project. Use after list_projects/choice_required โ the native FPT link workflow opens the project the user chose; the link itself is created from Flame's own Flow Production Tracking menu (flame-mcp's fpt_link only reports it)."
- Changed
openclip_create3 fields changed- added
Input schema / $defs / OpenclipCreateInput / properties / extra_publish_typesAdded value: +{ + "anyOf": [ + { + "items": { + "type": "string" + }, + "type": "array" + }, + { + "type": "null" + } + ], + "default": null, + "description": "Publish TYPES to splice in beside the Task-selected versions, matched on the Shot regardless of Task (e.g. ['Flame Render']). Chat 99: Flame's own tk-flame batch-render integration publishes the comp as 'Flame Render' with NO Task โ its context comes from the .batch path, whose template carries no Step token โ so no step/task selector can reach it and the conformed clip never learns the comp exists. Each type becomes its own version group appended AFTER the task-selected ones, so it lands on top and becomes current. The uid token is read from the publish code (<Shot>_<TOKEN>_v<version> -> 'CMP_v001'), falling back to the type name uppercased. Explicit by design: the tool still never guesses which publishes feed a conform.", + "title": "Extra Publish Types" +} - added
Input schema / $defs / OpenclipCreateInput / properties / keep_source_currentAdded value: +{ + "default": false, + "description": "Mark the FIRST (source) version current instead of the newest. Chat 99, measured in-vivo: Flame reads the very same .clip as start_frame=1001 when the light version is current and as start_frame=0 (spanning 1101 frames) when the comp version is โ so with the comp current every 'Update Sources' replace anchored the conformed segment at 00:00:00:00 and lost its cut. Aligning the feeds' timecode, rate, sampleRate and TimecodeSource did NOT change that. Keeping the source current sidesteps it without writing to the timeline: the comp version is still in the clip and the operator flips to it natively, which is the intended gesture anyway.", + "title": "Keep Source Current", + "type": "boolean" +} - added
Input schema / $defs / OpenclipCreateInput / properties / stepsAdded value: +{ + "anyOf": [ + { + "items": { + "type": "string" + }, + "type": "array" + }, + { + "type": "null" + } + ], + "default": null, + "description": "MULTI-STEP aggregation (Chat 98 comp architecture): splice publishes from SEVERAL Steps into ONE clip, in list order (e.g. ['Light', 'Comp'] โ the conform timeline sees the LGT render and every comp version through the same open clip, flipping natively). Version uids are disambiguated with the step string uppercased ('LIGHT_v003', 'COMP_v001'); current = the newest version of the LAST listed step that has publishes. A listed step with no publishes is skipped and reported, never an error โ the clip is valid before the first comp render exists. Takes precedence over 'step'/'task_id'.", + "title": "Steps" +}
2 tool updates
v1.25.0- Changed
fpt_launch_app2 fields changed- added
Input schema / $defs / FptLaunchAppInput / properties / flame_projectAdded value: +{ + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null, + "description": "Flame only: EXPLICIT local Flame project to open (case-insensitive), overriding the name derived from the SG project. Use after list_projects/choice_required โ the native FPT link workflow opens the project the user chose, then verifies/sets the link via flame-mcp's fpt_link tool.", + "title": "Flame Project" +} - added
Input schema / $defs / FptLaunchAppInput / properties / list_projectsAdded value: +{ + "default": false, + "description": "Flame only: return the list of local Flame projects (plus the SG project name and derived slug) WITHOUT launching anything. Use it to ask the user which project to open/link โ never guess: a name-derived match is NOT evidence of a native FPT link.", + "title": "List Projects", + "type": "boolean" +}
- Changed
openclip_create2 fields changed- added
Input schema / $defs / OpenclipCreateInput / properties / stepAdded value: +{ + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null, + "description": "Pipeline Step selector: matches the publish Task's Step by code OR short_name (e.g. 'Light' / 'LGT'). Ignored when task_id is given. When BOTH are omitted the tool never builds: it returns a choice_required listing of the shot's candidate Tasks (publish counts + a dependency-based suggestion when the task graph provides one) for the caller to confirm.", + "title": "Step" +} - added
Input schema / $defs / OpenclipCreateInput / properties / task_idAdded value: +{ + "anyOf": [ + { + "type": "integer" + }, + { + "type": "null" + } + ], + "default": null, + "description": "Explicit ShotGrid Task id whose publishes populate the clip. Strongest selector โ takes precedence over 'step'.", + "title": "Task Id" +}
2 tool updates
v1.24.0- Added
cut_to_edl - Added
openclip_create
16 tool updates
v1.23.0- First observed
fpt_bulk - First observed
fpt_launch_app - First observed
fpt_reporting - First observed
learn_pattern - First observed
reset_session_stats - First observed
search_sg_docs - First observed
session_stats - First observed
sg_create - First observed
sg_download - First observed
sg_find - First observed
sg_resolve_source - First observed
sg_schema - First observed
sg_update - First observed
sg_upload - First observed
tk_publish - First observed
tk_resolve_path
TDQS
Scored across 18 tools
Most tools have clearly distinct purposes (CRUD vs launch vs docs vs reporting), and descriptions are detailed. Potential ambiguity exists between sg_find and fpt_reporting's text_search, and sg_schema vs search_sg_docs, but the descriptions clarify their different intents.
There is a recognizable sg_/tk_/fpt_ prefix system with mostly verb_noun names, but it is not uniform. Non-prefixed tools like cut_to_edl, openclip_create, reset_session_stats, and session_stats break the pattern, and fpt_bulk/fpt_reporting are non-verb names.
18 tools is reasonable for a broad ShotGrid/VFX pipeline server covering CRUD, publishing, app launching, editorial, reporting, and documentation assistance. It is slightly high but each tool earns its place and there is no overwhelming redundancy.
The surface covers ShotGrid CRUD, uploads/downloads, publishing, app launches, editorial operations, reporting, and documentation lookup. Minor gaps exist, such as delete/revive being tucked inside fpt_bulk rather than having standalone sg_delete, but agents can complete workflows without dead ends.
Maintenance
Related MCP Connectors
MCP server that lets AI assistants use all OneSchema features exposed via the public API.
MCP server unifying ERPs, CRMs, APIs and knowledge base for Claude, ChatGPT and Gemini.
Nifty's MCP server โ exposes tasks, projects, messages, and files as tools for AI agents.
MCP server for secureFlows: token-free URL builders and integration-linting tools for AI agents.
Related MCP Servers
- FlicenseAqualityCmaintenanceAn MCP server that exposes Autodesk Platform Services (APS) as tools for AI assistants to interact with the APS Data Management API. It enables users to authenticate and manage hubs, projects, and folders through a standardized interface.272-
- FlicenseNot gradedqualityDmaintenanceMCP server integrating Autodesk Platform Services, exposing tools for LLM clients like VS Code Copilot, with OAuth authentication and agentic workflow support.-
- AlicenseNot gradedqualityAmaintenanceBridges AI assistants to Autodesk ShotGrid (Flow Production Tracking) data, enabling CRUD, search, batch operations, and schema exploration via typed MCP tools with progressive loading.1MIT
- AlicenseNot gradedqualityCmaintenanceA lean MCP server giving LLM agents full access to the ShotGrid / Autodesk Flow Production Tracking API through 15 curated tools, including generic CRUD, schema discovery, and safe writes with a dry_run flag.1MIT