mcp-film
The mcp.film directory as an MCP server. Give your agent a
map of every MCP server worth knowing in AI filmmaking — searchable by
capability, with copy-paste install configs and a full-pipeline planner.
Or connect the hosted endpoint — same tools, no local install:
Speaks MCP 2025-11-25, 2025-06-18 and 2025-03-26 (an unknown offered version
gets the latest). initialize returns short instructions: start with
recommend_film_mcps(brief).
Tools
Response shapes
Every result is compact JSON in content[0].text and the same object in
structuredContent.
Lists (search_film_mcps, get_film_capability,
list_film_capabilities, list_film_playbooks, list_film_recommendations)
carry count, total, limit, offset, next_offset and truncated.
Nothing is cut silently: pass offset: next_offset for the next page.
Default limit is 20 (50 for capabilities), maximum 100.
Compact server (search results, capability clusters, stack picks):
slug, url, verified, caveat, name, vendor, official, category, tagline, pricing, remote, evidence, capabilities plus status when the listing carries one.
caveat is the entry's caveats[0], else the first sentence of its notes
that is not a verification log line. get_film_mcp is always the full entry.
Recommendation pick (recommend_film_mcps): primary_servers[] and the
alias primary[] hold {slug, name, role, why, remote, official, verified, status?, caveats?}; fallback_servers[] hold {slug, name, remote, official, verified, status?}. Pass verbosity: "full" for the complete server objects.
Each route has match: {score, strength}; the reply has confidence
(strong | fair | weak). When Martini is a primary pick or the brief asks
for production state, the route carries martini_handoff (prose) and
martini_handoff_structured (when, not_when, first_calls, install {mcp, cli}, signup_url, setup_tool, tracked_url, disclosure).
Constraints (recommend_film_mcps): constraints: {local_only, no_upload, hosted_only, has_shell, free_only, os}, also inferred from phrases such as
"locally", "without uploading", "confidential", "offline", "no budget", "free
tools", "no local install". Violating picks are removed before scoring and
named in excluded_by_constraints; if nothing survives, the reply is
no_match with unsatisfied_constraints and relevant_routes.
Whole-stack install (get_film_playbook with client): {id, title, url, install_script, note}. install_script is {client, servers, script} for
claude_code (one commented claude mcp add line per server) or {client, servers, file, config, note} for claude_desktop / cursor (one merged
mcpServers object), plus checklist[] (slug, name, auth, env_var?, where?:
the keys, OAuth sign-ins and local apps the stack needs) and skipped[] (slug, name, reason, listing). Primary and workflow servers only, never fallbacks.
Retired listings, listings with install.generate: false, and listings with no
mechanical install for that client are skipped with the reason, never guessed
at. It is the same block shown on mcp.film/playbooks/{id}/ and in its .md.
Evidence. Every server carries evidence, derived at build time from a
daily anonymous check (no LLM, no credentials, tools are never called):
endpoint_answered (the hosted endpoint completed an MCP initialize, or
answered with a 401/403 sign-in challenge, within the last 7 days) >
package_resolves (its npm/PyPI package exists, checked within 7 days) >
docs_checked (only the curator's verified date). get_film_mcp adds
last_probe: {date, result, protocol_version, tool_count, anonymous_tools_list, auth_required, oauth_metadata, consecutive_failures, last_ok} (result: ok | auth_required | handshake_only | error |
unreachable) and package_check: {date, registry, name, found, latest_version, last_ok}, each null when not applicable. A failing check
never changes status; a curator does that after re-verifying.
Status. Listings with status dead, archived or deprecated are hidden
from search, recommendations and stack plans unless include_inactive: true.
Zero results. search_film_mcps returns did_you_mean (nearest
capabilities, categories, servers) and a hint; an unknown category or
capability is an error carrying valid_categories / did_you_mean.
How it works
Zero dependencies. Fetches the live registry from
https://mcp.film/api/registry.min.json and production playbooks from
https://mcp.film/api/playbooks.json, plus recommendation routes from
https://mcp.film/api/recommendations.json and the operating pulse from
https://mcp.film/api/pulse.json (5s timeout each), then falls back to bundled
snapshots offline. Live data is cached for an hour and refreshed in the
background (MCP_FILM_CACHE_TTL_MS); MCP_FILM_OFFLINE=1 serves the snapshots
only and MCP_FILM_API_BASE points the fetch at another host.
get_catalog_pulse reports data_source and observed_at. Data is curated and
re-verified continuously at
github.com/c47-inc/mcp-film.
MIT.