Koskamo

supplemental.pl MCP

A public, read-only MCP server providing EU and Polish food law data for dietary supplements. It allows AI assistants to query the EU Register of nutrition and health claims, the EU Novel Food Catalogue, and supplemental.pl articles. It also includes tools for GIS notification steps, C.L.A.I.M.S. claim retrieval, and deterministic nutrition calculation via Nutrimetr.

Endpoint and access

No sign-in to connect and list tools. Individual tools may still need a vendor account, credentials, or permissions; check the documented prerequisites.

supplemental.pl MCP logo, by supplemental.plVendor evidenceStreamable HTTPNo sign-inEndpoint checked 2026-11-01Operated by supplemental.pl
MCP endpoint (Streamable HTTP)
https://mcp.supplemental.pl/mcp
Vendor documentation

What you can do with it

  • Check health claim authorization status for a substance in the EU Register
  • Look up novel food status for an ingredient in the EU Novel Food Catalogue
  • Retrieve GIS notification steps for placing a food supplement on the Polish market
  • Calculate nutrition declaration and candidate nutrition claims for a recipe

Source and maintenance

Vendor evidenceRegistry 1.0.1

Protocol and capabilities

Server
supplemental-pl 1.0.0
MCP protocol
2025-06-18
Tools
8 advertised
Resources
Not advertised
Resource templates
Not advertised
Prompts
Not advertised
Server-advertised capabilities
{
  "tools": {
    "listChanged": false
  }
}

Server-provided instructions

Untrusted server output shown for inspection. It is not Koskamo guidance and is excluded from knowledge search.

Read-only EU/Polish food-law reference from supplemental.pl (Tomasz Krawczyk). Tools: knowledge articles (PL/EN/DE), the official EU Register of health claims and the EU Novel Food Catalogue (EC data, CC BY 4.0), C.L.A.I.M.S. claim matching incl. botanicals on hold, the Polish GIS notification procedure, and a deterministic nutrition calculation (Nutrimetr). Rules: an EFSA opinion is not an authorisation; botanicals on hold are not authorised; a GIS notification is not a novel food authorisation. Every result links a supplemental.pl page and a legal source. Not legal advice. No prices.

Tools

8 advertised

search_articles — Search supplemental.pl knowledge articles
Advertised by the server during the last successful anonymous check.
Advertised read-only

Full-text search of supplemental.pl knowledge articles on EU/PL food law (health claims, novel food, supplements, labelling, CJEU case law) in Polish, English or German. Returns titles, URLs, dates, summaries and language versions.

search_articles input schema
{
  "type": "object",
  "required": [
    "query"
  ],
  "properties": {
    "lang": {
      "enum": [
        "pl",
        "en",
        "de"
      ],
      "type": "string",
      "description": "Response language. Default: en."
    },
    "limit": {
      "type": "integer",
      "maximum": 10,
      "minimum": 1,
      "description": "Max results (default 5)."
    },
    "query": {
      "type": "string",
      "maxLength": 200,
      "minLength": 2,
      "description": "Search terms, e.g. \"novel food NMN\" or \"oświadczenia zdrowotne witamina D\"."
    }
  }
}
search_articles annotations
{
  "readOnlyHint": true,
  "openWorldHint": false,
  "idempotentHint": true,
  "destructiveHint": false
}
get_article — Get a supplemental.pl article
Advertised by the server during the last successful anonymous check.
Advertised read-only

Return one supplemental.pl knowledge article by URL or slug: summary, headings, a text excerpt, legal references named in it and its PL/EN/DE versions. Pass lang to get another language version.

get_article input schema
{
  "type": "object",
  "required": [
    "url"
  ],
  "properties": {
    "url": {
      "type": "string",
      "maxLength": 400,
      "minLength": 3,
      "description": "Article URL on supplemental.pl or its slug."
    },
    "lang": {
      "enum": [
        "pl",
        "en",
        "de"
      ],
      "type": "string",
      "description": "Response language. Default: en."
    }
  }
}
get_article annotations
{
  "readOnlyHint": true,
  "openWorldHint": false,
  "idempotentHint": true,
  "destructiveHint": false
}
check_health_claim — Check the EU Register of health claims
Advertised by the server during the last successful anonymous check.
Advertised read-only

Look up a nutrient/substance in the official EU Register of nutrition and health claims (European Commission data, refreshed weekly). Shows whether each claim is Authorised, Non-authorised or Revoked, its conditions of use, the EFSA question and the legal act.

check_health_claim input schema
{
  "type": "object",
  "required": [
    "substance"
  ],
  "properties": {
    "lang": {
      "enum": [
        "pl",
        "en",
        "de"
      ],
      "type": "string",
      "description": "Response language. Default: en."
    },
    "limit": {
      "type": "integer",
      "maximum": 25,
      "minimum": 1
    },
    "status": {
      "enum": [
        "all",
        "authorised",
        "non_authorised",
        "revoked"
      ],
      "type": "string",
      "description": "Default: all."
    },
    "substance": {
      "type": "string",
      "maxLength": 200,
      "minLength": 2,
      "description": "Nutrient or substance (English or Latin), e.g. \"vitamin C\", \"glucomannan\"."
    },
    "claim_text": {
      "type": "string",
      "maxLength": 300,
      "description": "Optional words of the claim/function, e.g. \"immune system\"."
    }
  }
}
check_health_claim annotations
{
  "readOnlyHint": true,
  "openWorldHint": false,
  "idempotentHint": true,
  "destructiveHint": false
}
novel_food_status — Check the EU Novel Food Catalogue
Advertised by the server during the last successful anonymous check.
Advertised read-only

Look up a food or ingredient in the EU Novel Food Catalogue (European Commission data, refreshed weekly): status per part/form (Novel food, Not novel in food, Not novel in food supplements, Authorised novel food, consultation request), with links to Reg. 2015/2283 and the Union list.

novel_food_status input schema
{
  "type": "object",
  "required": [
    "name"
  ],
  "properties": {
    "lang": {
      "enum": [
        "pl",
        "en",
        "de"
      ],
      "type": "string",
      "description": "Response language. Default: en."
    },
    "name": {
      "type": "string",
      "maxLength": 200,
      "minLength": 2,
      "description": "Ingredient name (Latin, English or common name), e.g. \"Withania somnifera\", \"NMN\"."
    },
    "limit": {
      "type": "integer",
      "maximum": 20,
      "minimum": 1
    }
  }
}
novel_food_status annotations
{
  "readOnlyHint": true,
  "openWorldHint": false,
  "idempotentHint": true,
  "destructiveHint": false
}
search_claims_foodlaw — Match health claims with C.L.A.I.M.S.
Advertised by the server during the last successful anonymous check.
Advertised read-onlyOpen-world

Match an ingredient (and optional dose) against Reg. 432/2012 authorised claims and the SANCO/11074/2013 botanical list via C.L.A.I.M.S. (FOODLAW.ai). Botanical claims are always returned as regulatory_status "on_hold" (not authorised).

search_claims_foodlaw input schema
{
  "type": "object",
  "required": [
    "substance"
  ],
  "properties": {
    "dose": {
      "type": "string",
      "maxLength": 40,
      "description": "Optional dose, e.g. \"300 mg\"."
    },
    "lang": {
      "enum": [
        "en",
        "pl"
      ],
      "type": "string"
    },
    "substance": {
      "type": "string",
      "maxLength": 200,
      "minLength": 1,
      "description": "Ingredient (Latin, English or Polish)."
    }
  }
}
search_claims_foodlaw annotations
{
  "readOnlyHint": true,
  "openWorldHint": true,
  "idempotentHint": true,
  "destructiveHint": false
}
get_claim_foodlaw — Get a C.L.A.I.M.S. claim by ID
Advertised by the server during the last successful anonymous check.
Advertised read-onlyOpen-world

Fetch one claim from C.L.A.I.M.S. by its numeric ID (from search_claims_foodlaw). Botanicals are always "on_hold".

get_claim_foodlaw input schema
{
  "type": "object",
  "required": [
    "id"
  ],
  "properties": {
    "id": {
      "type": "integer",
      "minimum": 1
    },
    "lang": {
      "enum": [
        "en",
        "pl"
      ],
      "type": "string"
    }
  }
}
get_claim_foodlaw annotations
{
  "readOnlyHint": true,
  "openWorldHint": true,
  "idempotentHint": true,
  "destructiveHint": false
}
gis_notification_steps — Polish GIS notification of a food supplement — steps
Advertised by the server during the last successful anonymous check.
Advertised read-only

Step-by-step procedure for notifying a food supplement to the Polish Chief Sanitary Inspectorate (GIS, Art. 29–30 of the Food and Nutrition Safety Act), from the supplemental.pl article. A GIS notification is not a novel food authorisation.

gis_notification_steps input schema
{
  "type": "object",
  "properties": {
    "lang": {
      "enum": [
        "pl",
        "en",
        "de"
      ],
      "type": "string",
      "description": "Response language. Default: en."
    }
  }
}
gis_notification_steps annotations
{
  "readOnlyHint": true,
  "openWorldHint": false,
  "idempotentHint": true,
  "destructiveHint": false
}
nutrition_calc — Calculate a nutrition declaration (Nutrimetr)
Advertised by the server during the last successful anonymous check.
Advertised read-onlyOpen-world

Deterministic nutrition calculation for a recipe (no AI): energy and nutrients per 100 g, micronutrients with %NRV, candidate nutrition claims (withheld if any ingredient is unresolved), allergens and QUID hints. Ingredient lines with mass or volume, e.g. "mąka pszenna 500 g", "milk 200 ml". Max 20 calculations per user per day.

nutrition_calc input schema
{
  "type": "object",
  "required": [
    "ingredients"
  ],
  "properties": {
    "lang": {
      "enum": [
        "pl",
        "en",
        "de"
      ],
      "type": "string",
      "description": "Response language. Default: en."
    },
    "ingredients": {
      "type": "array",
      "items": {
        "type": "string",
        "maxLength": 120,
        "minLength": 2
      },
      "maxItems": 40,
      "minItems": 1,
      "description": "One ingredient per item, with quantity and unit (g, kg, mg, ml, l)."
    },
    "product_form": {
      "enum": [
        "solid",
        "liquid"
      ],
      "type": "string",
      "description": "Default solid."
    },
    "product_name": {
      "type": "string",
      "maxLength": 120
    },
    "mass_loss_pct": {
      "type": "number",
      "maximum": 90,
      "minimum": 0,
      "description": "Mass loss during processing (e.g. baking), %."
    }
  }
}
nutrition_calc annotations
{
  "readOnlyHint": true,
  "openWorldHint": true,
  "idempotentHint": true,
  "destructiveHint": false
}

Prompts

Not advertised

No prompt definitions available.

Resources

Not advertised

No resource definitions available.

30-day availability

Aggregated from read-only remote checks; this is not a tool-execution or security guarantee.

Successful checks
1 of 1 (100%)
Average latency
397 ms
95th percentile latency
397 ms

Maintenance history

Public check and source-refresh events. Editorial and ownership records remain private.

  • · probe · passed · 397 ms · metadata changed · 8 tool(s)

Connect from your client

Each snippet registers the same endpoint; pick the client you use.

This server is operated by the named third party. Listing and endpoint checks are not an endorsement or a security audit. Review the operator's permissions, terms, and data handling before connecting. How listings are checked and corrected.

Claude Code

Run this once in a terminal. It registers the remote server. Use --scope project to write .mcp.json for the repo.
Claude Code configuration
claude mcp add --transport http supplemental-pl-mcp https://mcp.supplemental.pl/mcp

Codex

Run this once. Codex stores MCP servers in ~/.codex/config.toml (or .codex/config.toml in a trusted project).
Codex configuration
codex mcp add supplemental-pl-mcp --url https://mcp.supplemental.pl/mcp

Cursor

Merge this server into .cursor/mcp.json in your project, then enable supplemental-pl-mcp in your MCP settings.
Cursor configuration
{
  "mcpServers": {
    "supplemental-pl-mcp": {
      "url": "https://mcp.supplemental.pl/mcp"
    }
  }
}

Cline

Merge this into cline_mcp_settings.json (Cline → MCP Servers → Configure).
Cline configuration
{
  "mcpServers": {
    "supplemental-pl-mcp": {
      "type": "streamableHttp",
      "url": "https://mcp.supplemental.pl/mcp",
      "disabled": false
    }
  }
}

VS Code

Merge this server into .vscode/mcp.json. Use MCP: List Servers to start supplemental-pl-mcp and inspect its tools.
VS Code configuration
{
  "servers": {
    "supplemental-pl-mcp": {
      "type": "http",
      "url": "https://mcp.supplemental.pl/mcp"
    }
  }
}

Gemini CLI

Run this once. It writes .gemini/settings.json in the current project; pass --scope user for ~/.gemini/settings.json.
Gemini CLI configuration
gemini mcp add --transport http supplemental-pl-mcp https://mcp.supplemental.pl/mcp

Claude Desktop

Merge this into claude_desktop_config.json (macOS: ~/Library/Application Support/Claude/, Windows: %APPDATA%\Claude\), then restart Claude Desktop.
Claude Desktop configuration
{
  "mcpServers": {
    "supplemental-pl-mcp": {
      "url": "https://mcp.supplemental.pl/mcp"
    }
  }
}

Windsurf

Merge this into ~/.codeium/windsurf/mcp_config.json, then refresh MCP in Cascade. Windsurf remote servers use serverUrl, not url.
Windsurf configuration
{
  "mcpServers": {
    "supplemental-pl-mcp": {
      "serverUrl": "https://mcp.supplemental.pl/mcp"
    }
  }
}

Let your agent find its tools

Find servers like supplemental.pl MCP from your agent. Add Koskamo once to search the index for endpoints, access requirements, and client setup. Public discovery needs no key.

Do you run supplemental.pl MCP?

Prove ownership with a DNS record, a well-known file, or your Official MCP Registry entry, and your edits publish immediately. Proofs are re-checked weekly; admins can still hide or remove a listing.

Claim this listing