Skip to main content
Glama
Feirobot

openfilm-mcp

by Feirobot

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

search_film_stocks

Filter 68 stocks by text, ISO, type, grain, latitude, format, use case or price tier.

get_film_stock

One stock by id or name (kodak-portra-400 / "Portra 400").

recommend_film

Ranked picks for a scene (portrait, landscape, street, night, travel, studio, beginner).

search_cameras

Filter 60 bodies by text, type, mount, format or price tier.

get_camera

One camera by id or name (nikon-fm2).

compare_films

Two stocks side by side.

audit_url

Instant technical SEO audit of one public URL. 1 USDC.

Related MCP server: siteone-mcp-server

Install

npx -y github:Feirobot/openfilm-mcp

Or 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 tools
audit_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.

ParametersJSON Schema
NameRequiredDescriptionDefault
txNo
urlYes
chainNo

TDQS

A3.7/5.0
Behavior3/5

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.

Conciseness5/5

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.

Completeness3/5

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.

Parameters3/5

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.

Purpose4/5

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.

Usage Guidelines4/5

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.

ParametersJSON Schema
NameRequiredDescriptionDefault
aYes
bYes

TDQS

C2.7/5.0
Behavior2/5

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.

Conciseness4/5

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.

Completeness2/5

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.

Parameters2/5

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.

Purpose4/5

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.

Usage Guidelines2/5

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.

ParametersJSON Schema
NameRequiredDescriptionDefault
id_or_nameYes

TDQS

C2.9/5.0
Behavior2/5

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.

Conciseness4/5

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.

Completeness3/5

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.

Parameters3/5

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.

Purpose4/5

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.

Usage Guidelines2/5

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.

ParametersJSON Schema
NameRequiredDescriptionDefault
id_or_nameYes

TDQS

B3.2/5.0
Behavior2/5

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.

Conciseness5/5

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.

Completeness3/5

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.

Parameters4/5

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.

Purpose4/5

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.

Usage Guidelines2/5

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.

ParametersJSON Schema
NameRequiredDescriptionDefault
sceneYes
formatNo
max_price_tierNo

TDQS

B3.2/5.0
Behavior2/5

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.

Conciseness4/5

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.

Completeness3/5

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.

Parameters3/5

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.

Purpose4/5

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.

Usage Guidelines3/5

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.

ParametersJSON Schema
NameRequiredDescriptionDefault
typeNo
limitNo
mountNo
queryNo
formatNo
max_price_tierNo

TDQS

C2.9/5.0
Behavior2/5

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.

Conciseness5/5

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.

Completeness2/5

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.

Parameters3/5

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.

Purpose4/5

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.

Usage Guidelines2/5

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.

ParametersJSON Schema
NameRequiredDescriptionDefault
isoNo
typeNo
grainNo
limitNo
queryNo
formatNo
best_forNo
max_price_tierNo

TDQS

C2.9/5.0
Behavior2/5

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.

Conciseness5/5

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.

Completeness2/5

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.

Parameters3/5

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.

Purpose4/5

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.

Usage Guidelines2/5

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.

  1. 7 tool updatesv1.0.0
    • First observedaudit_url
    • First observedcompare_films
    • First observedget_camera
    • First observedget_film_stock
    • First observedrecommend_film
    • First observedsearch_cameras
    • First observedsearch_film_stocks

TDQS

B3.3/5.0

Scored across 7 tools

Disambiguation4/5

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.

Naming Consistency5/5

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.

Tool Count4/5

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.

Completeness4/5

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

ActivityMaintained
ResponsivenessNo issues

Related MCP Connectors

Related MCP Servers

  • A
    license
    Not graded
    quality
    C
    maintenance
    Agent-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
  • A
    license
    B
    quality
    C
    maintenance
    Provides 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.
    18
    MIT
  • F
    license
    Not graded
    quality
    C
    maintenance
    Enables natural language technical and JavaScript SEO audits, including headless rendering, hydration gap analysis, schema validation, AEO checks, and semantic cannibalization detection.
    1
    -