api-config

api-config is a skill for Claude Code from cyanheads/openfoodfacts-mcp-server. It costs 43 tokens per session (7,916 once invoked), scanned A, a copy of api-config, Apache-2.0.

A reference for configuring an @cyanheads/mcp-ts-core server through framework options, package metadata, and environment variables. It separates framework settings from the application's own Zod-validated settings and explains lazy configuration parsing.

In plain words
What is it for?
Use it when adding environment variables, setting server identity or metadata, defining server-specific configuration, or checking how configuration is loaded.
Why use it?
It prevents core and application configuration from being mixed together and makes precedence and defaults clear. It also highlights a special setup requirement for Cloudflare Workers.

Skill for Claude Code

Written for Claude Code: shipped in a Claude Code plugin.

Part of the openfoodfacts-mcp-server plugin — 35 skills, 1 MCP server shipped together

Good fit Use it when adding environment variables, setting server identity or metadata, defining server-specific configuration, or checking how configuration is loaded.

Compare 6 skills from other repositories ↓
Install with agentmods
npx agentmods add skills/cyanheads/openfoodfacts-mcp-server/api-config
Install

Getting it into your agent

One page per mod, every tool's command on it. A separate URL per tool would split the same page into five that compete with each other.

Any agent
npx skills add cyanheads/openfoodfacts-mcp-server --skill api-config
Clone the repo
git clone --depth 1 https://github.com/cyanheads/openfoodfacts-mcp-server

Made for: Claude Code.

Or install openfoodfacts-mcp-server, the plugin that ships this one along with the rest of its 35 skills, 1 MCP server.

Wrote this? Show the measurements

A badge with what this costs and how it scanned, read live from this page, so it follows the numbers instead of freezing them. Markdown for a README, HTML for a documentation site or a project page.

agentmods badge for api-config

README.md
[![agentmods](https://agentmods.dev/badge/skills/cyanheads/openfoodfacts-mcp-server/api-config/github.svg)](https://agentmods.dev/skills/cyanheads/openfoodfacts-mcp-server/api-config)
Your own site
<a href="https://agentmods.dev/skills/cyanheads/openfoodfacts-mcp-server/api-config"><img src="https://agentmods.dev/badge/skills/cyanheads/openfoodfacts-mcp-server/api-config/github.svg" alt="Measured on agentmods" height="20"></a>

Or the 80×15 button, for a site that already has a row of RSS and ATOM ones. Only the verdict fits; the numbers stay here.

agentmods 80×15 button for api-config

Your own site · 80×15
<a href="https://agentmods.dev/skills/cyanheads/openfoodfacts-mcp-server/api-config"><img src="https://agentmods.dev/badge/skills/cyanheads/openfoodfacts-mcp-server/api-config.svg" alt="Reviewed on agentmods" width="80" height="20"></a>
Per session 43 Skills are progressive disclosure: only the name and description are preloaded; the body loads when the skill is used.
When invoked 7,916 The whole file, excluding the scripts and references it only reads on demand.
Security scan A 0 findings. A grade says what 26 rules found in the file — not that it is safe.
Origin 100% copy Near-identical to another mod in the catalogue.
Token cost

What it costs to keep this loaded

Counted locally with the o200k_base tokenizer, which is exact for GPT models; Claude uses its own tokenizer and its counts differ. Treat this as one consistent yardstick across the catalogue rather than a bill. Prices are per million input tokens.

ModelPer sessionOnce invoked
Fable 5.1 $0.00043 $0.07916
Opus 5.5 $0.00017 $0.03166
Sonnet 5.5 $0.00009 $0.01583
Haiku 4.5 $0.00004 $0.00792

Measured yesterday against content hash 05a2f269e7f9, method: parsed. Prices are Anthropic first-party input rates as of 2026-10-07, from the pricing page.

Security

Grade A, and why

api-config scanned grade A with 0 findings against 26 rules in 11 categories — prompt injection, anti-refusal, data exfiltration, privilege escalation, supply chain, agent snooping, system-prompt leakage, SSRF and excessive agency — measured yesterday.

A static scan of the body, not an audit. Every finding is printed with the line that produced it so you can judge whether it matters here. A mod is markdown that instructs an agent; that is exactly why what it instructs is worth reading.

Nothing flagged

None of the 26 patterns this scan looks for appear in this file: no shell pipes, no recursive deletes, no credential paths, no hidden text, no instruction-override or anti-refusal phrasing, no agent-config snooping. That is not a guarantee, it is the absence of the things that are checkable.

Origin

This is a copy

100% identical to api-config — 0 lines differ, which has more behind it and is treated as the original. This page carries a canonical link to it rather than competing with it.

framework-skills/api-config/SKILL.md · 314 lines

How it starts

The opening of the file, as written. The whole thing — 314 lines — stays where its author put it; the contents beside it link to each section on GitHub.

Overview

Configuration has two layers: core config (managed by the framework, env-driven) and server config (your own Zod schema for domain-specific env vars). Never merge them.

Import: AppConfig, config, parseConfig, resetConfig, ConfigSchema from @cyanheads/mcp-ts-core/config.


Core config

Managed by @cyanheads/mcp-ts-core. Validated via Zod from environment variables. Uses a lazy proxy — parsing is deferred until the first property read, and importing the package (any subpath) never reads it, so a bad framework variable surfaces when createApp() starts: the Configuration error — server failed to start banner lists each failure as the variable, its schema path, and the reason ( - CANVAS_DEFAULT_ROW_LIMIT (canvas.defaultRowLimit): Too small: expected number to be >=1), and the process exits 1. The thrown ConfigurationError carries the same failures as data.issues ({ envVar, path, message, code }). createWorkerHandler() drops any config cached before its first request and re-parses after the bindings are injected.

Startup overrides must survive reparsing. createApp() resets core config when applying identity or session-mode options, so an earlier resetConfig(overrides) is not a persistent application default. After dotenv loading, seed server defaults into unset environment variables (including blank or whole-value placeholder settings), preserve explicit operator values, then reset the cached config. Validate the resolved core.config in setup().

Priority (highest to lowest):

  1. name/version/title/websiteUrl/description/icons options passed to createApp() or createWorkerHandler()
  2. Environment variables
  3. sessionMode.default passed to createApp() — a default, so it sits below the env var it seeds, unlike the identity options above
  4. package.json fields

Where package.json is read from: the application root — the nearest package.json at or above the process entry module (process.argv[1]), which is the served package on every launch path (npx, .mcpb, a client config naming dist/index.js), none of which run from the package root. The launching client's working directory is never the anchor: a stdio client starts the server from wherever it happens to be, so reading identity from there makes a server report a foreign project's name and version. When the entry module is a tool installed under a node_modules tree and the process runs from the directory owning that tree — a test runner is the usual case — the nearest manifest at or above the working directory wins instead. That also covers a workspace monorepo, where the runner is hoisted to the repo root while the process runs from a package directory: an owner that is a strict ancestor of the working directory qualifies only when it declares a workspace (a workspaces field in its manifest, or a pnpm-workspace.yaml beside it), which is what keeps a cache prefix or a plain project root — equally ancestors of a working directory inside them — from overriding an installed package's own identity. The owner is the outermost node_modules boundary, so a transitively-installed runner and a pnpm isolated layout resolve the same way. With no manifest reachable, the framework's own identity is the fallback.

Read the full file on GitHub · 314 lines

Changes

What this file has done since we first saw it

Hashed on every crawl. A supply-chain change to an agent config is a question of when, not whether, so the history is kept rather than the latest state alone.

  1. yesterday Changed 05a2f269e7f9
  2. 4d ago Changed · +4 lines 41cd287d727c
  3. 15d ago Changed 6b06eafa1792
  4. 21d ago Changed · +15 lines cb146af52ee7
  5. 1mo ago Changed 437f472735b4
  6. 1mo ago Changed · +6 lines 7c0f6ef176d2
  7. 2mo ago First seen · 289 lines · 43 tokens per session scan A 9b2ee869e324

Subscribe to this mod's changes

api-config is a skill published in the GitHub repository cyanheads/openfoodfacts-mcp-server (1 stars, last pushed 2d ago), licensed Apache-2.0. It adds 43 tokens to every session and 7,916 once invoked, about $0.0002 per session on Opus 5.5. A static security scan graded it A with 0 findings. It is 100% identical to api-config, differing in 0 lines, and is treated as a copy.

Related

Other skills, from other repositories

open-meteo-guide

Tool choice, gates, and workflows for the openmeteo weather tools, covering threshold odds from the ensemble, frost, anomalies against a normal, 2050 projections, surf spots, river flood outlooks, and air quality for a set hour. Use before answering a weather, climate, marine, river, or air-quality question from…

cyanheads/open-meteo-mcp-server · 103 tokens

orcid-guide

Gates, identifier chains, and Solr query syntax for the orcid tools. Use when pinning an author name, DOI, grant number, or institution to an ORCID iD, building a researcher dossier, filtering works by type or year, following put-codes to abstracts and contributors, or writing a raw ORCID query.

cyanheads/orcid-mcp-server · 73 tokens

ensembl-guide

Gates and identifier chains for the ensembl tools. Covers checking a coordinate's assembly before you pass it in, finding a gene's counterpart in another species through homology, reading multi-allelic and capped VEP results, and which Ensembl object holds the UniProt, RefSeq, GO, and PDB references. Use when an…

cyanheads/ensembl-mcp-server · 95 tokens

noaa-spaceweather-guide

Judgment for the noaaspaceweather tools — turning SWPC Kp, storm scales, solar wind, flares, and alerts into answers about aurora visibility tonight, coming geomagnetic storms, radio blackouts, and impacts on HF radio, GPS, satellites, and power grids. Use before answering an aurora or space-weather question with…

cyanheads/noaa-spaceweather-mcp-server · 101 tokens

openchargemap-guide

Assess EV charging options with openchargemap tools. Use when recommending a compatible, accessible charger, checking conflicting reliability evidence, or deciding whether a station search covers the requested area.

cyanheads/openchargemap-mcp-server · 41 tokens

api-context

Canonical reference for the unified Context object passed to every tool and resource handler in @cyanheads/mcp-ts-core. Covers the full interface, its RequestContext base, all sub-APIs (ctx.log, ctx.state, ctx.requestInput, ctx.inputs, ctx.clientCapabilities, ctx.enrich, ctx.content), and when to use each.

cyanheads/open-meteo-mcp-server · 84 tokens