seed-oil-tracker-mcp
Seed Oil Tracker MCP Server
A free, hosted MCP server that gives AI assistants live access to the largest restaurant seed oil database: 500+ US chains, 40,000+ menu items, each with an estimated PUFA (polyunsaturated fat) value built from published nutrition data and disclosed cooking oils.
Ask your assistant things like:
Does Chick-fil-A use seed oils?
What oil does Chipotle cook with?
What is the cleanest thing to order at Five Guys?
Which chains have the lowest seed oil overall?
Connect
No key, no account, read only.
Endpoint (streamable HTTP):
https://seedoiltracker.com/mcpClaude (claude.ai): Settings, then Connectors, then Add custom connector, then paste the endpoint URL.
Claude Code:
claude mcp add --transport http seed-oil-tracker https://seedoiltracker.com/mcpAny other MCP client: streamable HTTP transport, no auth.
Setup guide: https://seedoiltracker.com/mcp-setup
Related MCP server: Macro Engine
Run locally (stdio)
Prefer a local process, or your client only speaks stdio? This repo ships a
zero-dependency stdio server (server.py, Python 3.8+, standard library
only). It answers the MCP handshake locally and forwards tool calls to the
hosted endpoint.
python server.pyClaude Desktop config example:
{
"mcpServers": {
"seed-oil-tracker": {
"command": "python",
"args": ["/path/to/server.py"]
}
}
}Or with Docker:
docker build -t seed-oil-tracker-mcp .
docker run -i seed-oil-tracker-mcpTools
Tool | What it does |
| One chain's seed oil letter grade, the oil it fries in, the cleanest menu items to order, and the highest to avoid. Fuzzy name matching. |
| Find covered chains by full or partial name. |
| Chains ranked cleanest first or worst first by average seed oil per menu item. |
Data
Same dataset that powers the Seed Oil Tracker iOS app and seedoiltracker.com. Also available as a no-key JSON API and ChatGPT Action (https://seedoiltracker.com/ai-tool) and as an open dataset in CSV and JSON, licensed CC BY 4.0 (https://seedoiltracker.com/open-data).
Methodology and citation: https://seedoiltracker.com/methodology
About
Built by Seed Oil Tracker (https://seedoiltracker.com). The hosted server is the primary way to connect; this repository documents it and ships the local stdio bridge. Questions and issues welcome here.
Available Tools
3 toolsget_chainA chain's seed-oil grade, frying oil, and cleanest ordersA
Look up one US restaurant chain: its seed-oil letter grade, the oil it cooks with, the lowest-seed-oil menu items to order, and the highest to avoid. Fuzzy name matching ('chickfila' finds Chick-fil-A).
| Name | Required | Description | Default |
|---|---|---|---|
| name | Yes | Restaurant chain name |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries full burden. It discloses fuzzy matching and US-only scope. However, it does not mention error behavior for unknown chains, authentication needs, or whether the data is static, leaving gaps for a tool with no safety annotations.
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 waste. Purpose is front-loaded, and fuzzy matching note is appended efficiently. Every word 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?
Despite no output schema, the description fully explains what is returned (grade, oil, best/worst items). It specifies US-only scope, making the tool's behavior complete for a single-parameter lookup.
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 sole parameter 'name' has 100% schema coverage (description 'Restaurant chain name'). The description adds significant value by explaining fuzzy matching behavior, which is 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 verb 'look up' and the specific resource 'one US restaurant chain', listing the exact data returned (grade, oil, items). It distinguishes from siblings by implying this is for detailed info on a single chain, while get_rankings and search_chains serve 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 context on fuzzy matching and implies use for specific chain details. However, it does not explicitly state when not to use it or mention alternatives like search_chains for finding chains or get_rankings for rankings.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_rankingsCleanest or worst chains, rankedA
Ranked list of chains by average seed oil per menu item. order=best (cleanest first) or worst.
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | Default 15 | |
| order | No | Default best |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, and the description does not explicitly state read-only or destructive behavior. However, 'Ranked list' implies a read operation. The description lacks details on what happens if no data is available or if parameters are invalid.
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 17 words, highly efficient. It is front-loaded with the title and immediately conveys the key functionality. 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?
For a simple tool with 2 parameters and no output schema, the description covers the essential logic: ranking by seed oil with order choice. The 'limit' parameter is documented in the schema (default 15), so omission in description is acceptable. No output schema exists, but the return type (list of chains) is inferable.
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 100% for both parameters. The description adds value by clarifying the 'order' parameter: 'order=best (cleanest first) or worst.' This provides semantic meaning beyond the schema's enum values.
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 it provides a ranked list of chains by average seed oil per menu item, with order parameter for best/worst. The title 'Cleanest or worst chains, ranked' reinforces the purpose. It distinguishes from sibling tools 'get_chain' (specific chain) and 'search_chains' (search functionality).
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?
Description does not explicitly state when to use this tool versus alternatives, nor does it provide when-not-to-use guidance. However, the context of sibling tools implies usage for rankings, and the description is clear enough for an agent to infer appropriate use cases.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
search_chainsFind matching chain namesA
Search the 500+ covered US chains by (partial) name; returns matches with grades.
| Name | Required | Description | Default |
|---|---|---|---|
| query | Yes | Full or partial chain name |
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 discloses that the tool returns matches with grades, but lacks details on limitations, edge cases (e.g., no matches), or behavior like pagination.
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, efficient sentence with no wasted words, front-loading the key action and result.
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 tool with one parameter and no output schema, the description provides adequate context (scope of 500+ chains, result type). Minor gap: no output structure details, but not critical for a basic search.
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 100% with a clear parameter description. The tool description adds 'by (partial) name' which reinforces but does not extend the schema's semantics, meeting the baseline for high 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?
The description explicitly states the action (search), resource (US chains by partial name), and result (matches with grades), clearly distinguishing it from sibling tools like get_chain and get_rankings.
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 use for partial name matching but does not explicitly state when to use alternatives or provide exclusions. The context from sibling names suggests distinct purposes.
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.
3 tool updates
v0.1.0- First observed
get_chain - First observed
get_rankings - First observed
search_chains
TDQS
Scored across 3 tools
Each tool has a clearly distinct purpose: single chain lookup, ranking list, and name search. No overlap in functionality.
All tools follow a consistent verb_noun snake_case pattern (get_chain, get_rankings, search_chains).
Three tools is well-scoped for a focused domain of tracking seed oils in chains, providing lookup, rankings, and search without redundancy.
Core operations are covered: individual lookup, ranked comparisons, and search. A potential minor gap is lack of a tool to list all chains, but search with partial name covers most use cases.
Maintenance
Related MCP Connectors
Food and nutrition data: search, macros, and comparisons
AI-native restaurant discovery: verified/menu-indexed/discovered tiers + signed allergy-safety data.
Unlock the power of food transparency with our Open Food Facts MCP server. Easily look up any food
Nutrition for 910 plant foods across 11 national datasets, plus GB/EU & US claim checking
Related MCP Servers
- AlicenseNot gradedqualityDmaintenanceA filesystem-based MCP server that turns any MCP-capable AI agent into a conversational calorie and protein tracker with natural-language estimates, confidence-aware logging, daily/weekly progress, food-history search, and export, working offline with local fallback data.15MIT
- AlicenseNot gradedqualityBmaintenanceTracks macros and logs meals via plain language by exposing a local USDA food database as an MCP server.MIT
- FlicenseAqualityBmaintenanceA local, JSON-first calorie and protein tracker for agents and shell workflows, providing a CLI and MCP server for meal tracking, goal management, and summaries with SQLite storage.11-
- AlicenseNot gradedqualityCmaintenanceExposes iiko restaurant management system REST API as 42+ LLM-callable tools over stdio, enabling natural language interaction with products, employees, orders, payments, OLAP reports, and assembly charts.2MIT