openfilm-mcp
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., "@openfilm-mcprecommend a film for night street photography"
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.
openfilm-mcp
An MCP server for the Openfilm film stock and classic camera datasets — 68 current and classic film stocks and 60 classic cameras, published as open data under CC BY 4.0.
The data is bundled, so the six search tools work offline. Only the paid audit_url tool talks
to the network.
Tools
tool | what it does |
| Filter 68 stocks by text, ISO, type, grain, latitude, format, use case or price tier. |
| One stock by id or name ( |
| Ranked picks for a scene (portrait, landscape, street, night, travel, studio, beginner). |
| Filter 60 bodies by text, type, mount, format or price tier. |
| One camera by id or name ( |
| Two stocks side by side. |
| Instant technical SEO audit of one public URL. 1 USDC. |
Related MCP server: siteone-mcp-server
Install
npx -y github:Feirobot/openfilm-mcpOr clone it and run node server.mjs.
Claude Desktop / Cursor / any MCP client
{
"mcpServers": {
"openfilm": {
"command": "npx",
"args": ["-y", "github:Feirobot/openfilm-mcp"]
}
}
}Remote server
The same tools are hosted at https://openfilm.cc/mcp (Streamable HTTP, no auth, no install):
curl -s https://openfilm.cc/mcp \
-H "content-type: application/json" \
-H "accept: application/json, text/event-stream" \
--data '{"jsonrpc":"2.0","id":1,"method":"tools/list"}'Official MCP Registry
The remote server is published in the official MCP Registry as
cc.openfilm/film-photography — search for it at
https://registry.modelcontextprotocol.io/v0.1/servers?search=openfilm or find it
through any client that reads the registry. The published metadata lives in
server.json.
It was published with the registry's HTTP domain authentication (an Ed25519 key),
which is why the name is under the cc.openfilm namespace rather than io.github.*.
The public half of the key is served at
https://openfilm.cc/.well-known/mcp-registry-auth.
The data
data.js is a snapshot of the published datasets
(film-stock-database.json,
camera-database.json), version 1.0.1.
The citable mirror with a Frictionless descriptor is
Feirobot/film-photography-datasets.
Schemas, provenance and citation notes: https://openfilm.cc/en/open-data/.
Licence
The code in this repository is MIT. The data in data.js is
CC BY 4.0 — reuse it freely, including
commercially, with attribution to openfilm.cc.
Available Tools
7 toolsaudit_urlA
Instant technical SEO audit of one public URL (1 USDC). Call without tx for the payment details, or with the transaction hash once paid.
| Name | Required | Description | Default |
|---|---|---|---|
| tx | No | ||
| url | Yes | ||
| chain | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations provided, so the description carries the full burden. It discloses the payment gating and the two-call pattern, which is useful. However, it doesn't state whether calling without tx returns an error or the payment info, what the audit covers, if results are cached, or rate limits.
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 clauses, front-loaded with the core purpose and followed by the usage pattern. Zero waste, every word 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?
For a payment-gated tool with no annotations, no output schema, and 0% schema description coverage, the description covers the high-level flow but omits critical context like chain semantics, the response of the free call, and what an audit returns.
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% with 3 parameters, so the description should compensate. It provides some meaning for tx ('transaction hash once paid') and url implicitly ('public URL'), but doesn't explain chain (e.g., which blockchain or allowed values) or the format of tx.
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?
States a specific verb and resource ('technical SEO audit of one public URL'), with 'instant' indicating synchronous behavior. It's clear what the tool does, though no sibling differentiation is needed since siblings are unrelated (film/camera tools).
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 describes the two modes of use: call without tx for payment details, or with tx once paid. It names the condition selecting each path. Missing details on what the payment details look like or how chain matters, but the core when-to-use is clear.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
compare_filmsC
Compare two film stocks side by side.
| Name | Required | Description | Default |
|---|---|---|---|
| a | Yes | ||
| b | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the full burden. It doesn't disclose whether this is a read-only operation, what dimensions get compared (grain, ISO, color response, price), or how results are returned. 'Side by side' is the only behavioral hint.
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?
One sentence, front-loaded with verb and resource. It is efficient, but the brevity comes at the cost of the missing semantics noted elsewhere.
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 comparison tool with opaque 'a'/'b' parameters, no annotations, and no output schema, the description is too thin. It should at least identify what the parameters reference and what the comparison returns.
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 coverage is 0% with two parameters named 'a' and 'b' that are opaque. The description says 'two film stocks' but does not clarify that 'a' and 'b' are film stock identifiers, nor their expected format (name, ID, slug). The description fails to compensate for the zero schema coverage.
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?
States a specific verb (compare) and resource (film stocks), which is unambiguous against siblings like search_film_stocks or get_film_stock. It doesn't explicitly differentiate from those siblings, but the comparison scope is clear from the verb.
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 guidance on when to use this versus search_film_stocks or get_film_stock, nor what kinds of comparisons are supported. The agent must infer that this is for two-stock head-to-head comparison only.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_cameraC
Look up one camera by id or name.
| Name | Required | Description | Default |
|---|---|---|---|
| id_or_name | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the full behavioral burden, and it discloses almost nothing: no not-found behavior, no return shape, no case-sensitivity or matching rules for the name. 'Look up' implies a read, but that is the entire behavioral content.
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?
A single front-loaded sentence with zero waste. It is efficient, though the brevity edges into under-specification rather than pure economy.
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 simple one-parameter lookup with no output schema, the description is minimally adequate: it conveys the resource and the key. It omits return behavior and error handling, which an agent must infer.
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 single parameter is named id_or_name, which is self-documenting. The description only restates that it accepts an id or a name, adding no format, matching, or ambiguity-resolution detail (e.g. what happens if both match).
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?
States a specific verb (look up) and singular resource (one camera), which implicitly differentiates it from the sibling search_cameras that presumably returns many. It is clear what the tool does, though it never explicitly names or contrasts the sibling.
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?
There is no explicit when-to-use or when-not-to-use guidance. The only hint is that a known identifier is required, but the description never says to prefer this over search_cameras or what to do if the identifier is unknown.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_film_stockB
Look up one film stock by id or name.
| Name | Required | Description | Default |
|---|---|---|---|
| id_or_name | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations at all, the description carries the full behavioral burden. 'Look up' implies a read, but nothing is said about permission requirements, behavior on a miss (error vs empty), or whether name matching is exact or fuzzy. For a lookup tool with zero structured safety hints, this is thin.
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?
One sentence, front-loaded with the verb and resource, no padding. Appropriate size for a single-parameter lookup.
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 a trivial one-param schema, no annotations, and no output schema, the description is minimally adequate. It omits return shape, not-found behavior, and how name collisions are resolved, which an agent would benefit from knowing before calling.
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 coverage is 0% and the single property is named only 'id_or_name' with no description, so the description is doing real work by clarifying that the one field accepts either an identifier or a name. It does not specify format or matching rules, but it resolves the core ambiguity the schema leaves open.
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?
States a specific verb ('look up') and resource ('one film stock'), and the singular 'one' implicitly contrasts with the sibling search_film_stocks. It stops short of naming that sibling explicitly, so the differentiation must be inferred from the verb form.
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 guidance on when to use this versus search_film_stocks, nor any note about what to do when the id or name is ambiguous or not found. The agent must guess that this is the direct-retrieval path.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
recommend_filmB
Recommend film stocks for a scene (portrait, landscape, street, night, travel, studio, beginner), optionally for a format and within a price tier.
| Name | Required | Description | Default |
|---|---|---|---|
| scene | Yes | ||
| format | No | ||
| max_price_tier | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full behavioral burden. It implies a read-only recommendation but says nothing about return format, whether results are ranked, how many are returned, or any constraints. This is a significant gap for a zero-annotation 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?
A single front-loaded sentence with no filler; the parenthetical scene list adds required information rather than padding. Slightly dense but 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?
For a 3-param tool with no annotations and no output schema, the description covers the core intent and scene values but omits format vocabulary, price tier semantics, and any sense of what the response contains.
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 coverage is 0%, so the description must compensate. It usefully enumerates the accepted 'scene' values (portrait, landscape, street, night, travel, studio, beginner), which the schema omits, but leaves 'format' options and the meaning/units of 'max_price_tier' unexplained.
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?
States a specific verb (recommend) and resource (film stocks) with a scoping qualifier ('for a scene'). It doesn't explicitly distinguish itself from the sibling search_film_stocks, but the recommendation framing itself implies a different behavior than search.
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 discovery/recommendation use case and enumerates valid scenes, but never states when to prefer this over search_film_stocks or get_film_stock. Usage context is inferred rather than declared.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
search_camerasC
Search the Openfilm classic camera database (60 bodies) by text, type, mount, format or price tier.
| Name | Required | Description | Default |
|---|---|---|---|
| type | No | ||
| limit | No | ||
| mount | No | ||
| query | No | ||
| format | No | ||
| max_price_tier | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations exist, so the description carries the full behavioral burden, and it discloses almost nothing beyond the database size. It does not explain pagination, the default for 'limit', result ordering, or what fields are returned, all of which matter for an unannotated search 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?
A single sentence that front-loads the resource and scope before listing facets. Nothing is wasted and no filler is present.
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?
With no annotations, no output schema, and 0% parameter description coverage, the definition is too thin: it omits the limit/pagination contract and any value formats for mount, format, or price tier. An agent could not construct a reliable query from this alone.
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 coverage is 0% for 6 parameters, so the description does most of the mapping: text→query, type, mount, format, and price tier→max_price_tier are all implied. However, 'limit' is never addressed and no accepted values or semantics for the tier/mount/format strings are given, leaving real gaps.
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?
States a specific verb (Search) and resource (the Openfilm classic camera database) plus its scope (60 bodies) and the searchable facets. It implicitly contrasts with the singular sibling get_camera, though it never names it or search_film_stocks explicitly.
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 when-to-use guidance is given — nothing tells the agent to prefer this over get_camera for a specific body, or over search_film_stocks for non-camera queries. The facet list hints at search behavior but provides no exclusions or alternative routing.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
search_film_stocksC
Search the Openfilm film stock database (68 current and classic stocks) by text, ISO, type, grain, latitude, format, use case or price tier.
| Name | Required | Description | Default |
|---|---|---|---|
| iso | No | ||
| type | No | ||
| grain | No | ||
| limit | No | ||
| query | No | ||
| format | No | ||
| best_for | No | ||
| max_price_tier | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the full behavioral burden. It does not state that results are read-only, whether filters combine with AND logic, what the default for the undocumented 'limit' is, or how results are returned or ordered.
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?
A single front-loaded sentence naming the verb, the resource, the corpus size, and the filtered dimensions with zero filler. Well sized for a search tool.
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?
With 8 undocumented parameters at 0% schema coverage, no annotations, and no output schema, one sentence is not sufficient. The agent is left without filter-combination semantics, default limit behavior, or any indication of what a result contains.
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%, so the description must compensate. It maps recognizable colloquial labels to parameters ('use case' for best_for, 'price tier' for max_price_tier) which adds some value beyond bare param names, but gives no accepted values (grain, type), no ISO range, and no price-tier definition. It also references 'latitude', which is not a parameter in the schema at all, which is a defect.
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?
States a specific verb (search) and resource (Openfilm film stock database), plus scope (68 current and classic stocks) and the facet dimensions available. It implicitly separates itself from get_film_stock (single lookup) but never names a sibling explicitly, so it falls short of a 5.
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 statement of when to use this tool versus get_film_stock, recommend_film, or compare_films, and no preconditions. Usage is only implied by the verb 'search', leaving the agent to infer that this is the exploration entry point.
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.
7 tool updates
v1.0.0- First observed
audit_url - First observed
compare_films - First observed
get_camera - First observed
get_film_stock - First observed
recommend_film - First observed
search_cameras - First observed
search_film_stocks
TDQS
Scored across 7 tools
The film/camera tools have clear boundaries (search vs get vs recommend vs compare), and recommend_film is distinguishable from search_film_stocks. However, audit_url is completely unrelated to the film domain and feels bolted on, which slightly muddies the set's purpose.
All names follow a clean verb_noun snake_case pattern (search_film_stocks, get_film_stock, recommend_film, search_cameras, get_camera, compare_films, audit_url). Minor noun plurality differences (film_stocks vs cameras) are trivial.
Seven tools is a well-scoped count for a reference database covering films and cameras. The lone deviation is audit_url, which does not belong to the apparent scope and inflates the set with an off-domain tool.
For a read-only film/camera reference domain, the surface covers search, lookup, recommendation, and comparison well. A minor gap is the absence of a camera comparison or similar cross-body tool, but core workflows are covered.
Maintenance
Related MCP Connectors
Full-cycle SEO automation for AI agents: technical audits, SEO articles, machine-readable pricing.
- CrawlieOAuthapp.crawlie
Technical SEO + GEO (AI-search) site audits: hosted crawls, prioritized fixes, report diffs.
Programmatic SEO as callable tools: research, generate, audit and publish landing pages.
Free SEO, GEO, and AEO audits: analyze any page or domain, AI-crawler access, agent readiness.
Related MCP Servers
- AlicenseNot gradedqualityCmaintenanceAgent-first SEO toolkit with 24 MCP tools for keyword research, rank tracking, site audits up to 50k pages, competitor analysis, content gap detection, domain reputation, backlink intelligence, Google Search Console integration, and AI-powered strategy generation with Claude, GPT, and Ollama. SQLite-backed and bring-your-own-key.MIT
- AlicenseAqualityDmaintenanceEnables SEO auditing and site analysis by crawling websites, identifying issues, and generating reports like sitemaps and markdown exports.56 npm4MIT
- AlicenseBqualityCmaintenanceProvides technical SEO tools for AI agents, including structured data generation, meta tag creation, robots.txt validation, and SERP previews, all offline with no API key or account.18MIT
- FlicenseNot gradedqualityCmaintenanceEnables natural language technical and JavaScript SEO audits, including headless rendering, hydration gap analysis, schema validation, AEO checks, and semantic cannibalization detection.1-