{"passport":{"unfragile":{"@version":"1.0","version":"2026-05","artifact":{"id":"awesome-frankfurtermcp","slug":"frankfurtermcp","name":"FrankfurterMCP","type":"mcp","url":"https://github.com/anirbanbasu/frankfurtermcp","page_url":"https://unfragile.ai/frankfurtermcp","categories":["mcp-servers"],"tags":[],"pricing":{"model":"open_source","free":true,"starting_price":null},"status":"active","verified":false},"capabilities":[{"id":"awesome-frankfurtermcp__cap_0","uri":"capability://tool.use.integration.mcp.based.currency.exchange.rate.retrieval.with.ecb.data","name":"mcp-based currency exchange rate retrieval with ecb data","description":"Exposes the Frankfurter API (European Central Bank currency data) as MCP tools via FastMCP framework, enabling LLM agents to fetch current and historical exchange rates through a standardized Model Context Protocol interface. Implements async tool registration with readOnlyHint and openWorldHint annotations, allowing Claude Desktop, VS Code, and HTTP-based clients to invoke currency operations without direct API knowledge.","intents":["I want my AI agent to fetch current exchange rates for multiple currency pairs in a single request","I need to integrate real-time currency data into an LLM-powered financial assistant","I want to expose currency APIs to Claude Desktop or VS Code without writing custom integrations"],"best_for":["AI agent developers building financial or travel applications","Teams integrating LLMs with real-time currency data","Claude Desktop and VS Code extension developers"],"limitations":["Depends on Frankfurter API availability and rate limits (no built-in rate limiting in MCP server itself)","Historical data limited to what Frankfurter API provides (typically ECB historical rates)","No built-in authentication for Frankfurter API (public endpoint, but subject to upstream changes)"],"requires":["Python 3.12 or 3.13","fastmcp>=2.13.1","Network access to https://api.frankfurter.app","MCP client (Claude Desktop, VS Code with MCP extension, or HTTP transport)"],"input_types":["currency codes (ISO 4217 format, e.g., 'USD', 'EUR')","amounts (numeric)","dates (ISO 8601 format for historical queries)"],"output_types":["JSON structured exchange rate data","conversion results (numeric)","currency code lists"],"categories":["tool-use-integration","currency-exchange"],"confidence":0.5,"matches":0,"success_rate":0},{"id":"awesome-frankfurtermcp__cap_1","uri":"capability://data.processing.analysis.latest.exchange.rate.fetching.with.15.minute.ttl.caching","name":"latest exchange rate fetching with 15-minute ttl caching","description":"Implements get_latest_exchange_rates tool that queries Frankfurter API for current exchange rates and caches results for 15 minutes using a TTL (time-to-live) cache strategy. Accepts base currency and target currencies as parameters, returning structured JSON with rates, timestamp, and metadata. Cache is transparent to the caller and automatically expires stale data.","intents":["I want to fetch current USD-to-EUR rates without hitting the API on every agent invocation","I need to convert an amount using today's exchange rates with minimal latency","I want to check multiple currency pairs (e.g., USD to EUR, GBP, JPY) in one call"],"best_for":["Real-time financial applications where 15-minute staleness is acceptable","High-frequency agent interactions that would otherwise spam the Frankfurter API","Multi-currency conversion workflows in chatbots or assistants"],"limitations":["15-minute cache TTL means rates are not real-time (up to 15 minutes stale)","Cache is in-process memory only — no persistence across server restarts","No cache invalidation mechanism if upstream rates change unexpectedly"],"requires":["Python 3.12+","fastmcp>=2.13.1","Network connectivity to Frankfurter API","Base currency code (ISO 4217) and target currency codes"],"input_types":["base_currency: string (e.g., 'USD')","currencies: comma-separated string or list (e.g., 'EUR,GBP,JPY')"],"output_types":["JSON object with keys: base, date, rates (dict of currency->rate), timestamp"],"categories":["data-processing-analysis","memory-knowledge"],"confidence":0.5,"matches":0,"success_rate":0},{"id":"awesome-frankfurtermcp__cap_2","uri":"capability://data.processing.analysis.currency.conversion.with.latest.rates","name":"currency conversion with latest rates","description":"Implements convert_currency_latest tool that performs real-time currency conversion by fetching current exchange rates and applying them to a specified amount. Accepts amount, source currency, and target currency as parameters. Internally calls get_latest_exchange_rates and applies the rate to compute the converted amount, returning both the result and the rate used.","intents":["I want to convert 100 USD to EUR using today's rate in a single agent call","I need to show a user the converted price in their local currency with current rates","I want to perform multi-step financial calculations that depend on live exchange rates"],"best_for":["E-commerce agents displaying prices in multiple currencies","Travel booking assistants converting costs to user's home currency","Financial advisors or investment tools requiring current conversion rates"],"limitations":["Subject to same 15-minute cache staleness as get_latest_exchange_rates","No support for mid-market vs bid/ask spreads (uses single rate from ECB)","Rounding behavior depends on Frankfurter API precision (typically 4-6 decimal places)"],"requires":["Python 3.12+","fastmcp>=2.13.1","Valid ISO 4217 currency codes for source and target","Numeric amount (positive, no currency symbol)"],"input_types":["amount: float or int","source_currency: string (ISO 4217)","target_currency: string (ISO 4217)"],"output_types":["JSON object with keys: amount, from_currency, to_currency, converted_amount, rate, timestamp"],"categories":["data-processing-analysis","tool-use-integration"],"confidence":0.5,"matches":0,"success_rate":0},{"id":"awesome-frankfurtermcp__cap_3","uri":"capability://data.processing.analysis.historical.exchange.rate.retrieval.with.lru.caching","name":"historical exchange rate retrieval with lru caching","description":"Implements get_historical_exchange_rates tool that fetches exchange rates for a specific date or date range from the Frankfurter API. Uses an LRU (Least Recently Used) cache with 1024-item capacity to cache historical queries, enabling efficient repeated lookups of the same historical periods without redundant API calls. Accepts base currency, target currencies, and date/date range parameters.","intents":["I want to fetch EUR-to-USD rates from January 2023 for historical analysis","I need to retrieve exchange rates for a specific date range to analyze currency trends","I want to cache historical rate queries so repeated requests don't hit the API"],"best_for":["Financial analysis and backtesting tools","Historical reporting and audit trails requiring past rates","Agents performing multi-step analysis on the same historical periods"],"limitations":["LRU cache limited to 1024 items — large date ranges or many unique queries will evict older entries","Historical data only available from Frankfurter API's coverage period (typically 1999 onwards for ECB rates)","No cache persistence — cache is lost on server restart","Date range queries may return large result sets; no pagination support"],"requires":["Python 3.12+","fastmcp>=2.13.1","Valid ISO 4217 currency codes","Date in ISO 8601 format (YYYY-MM-DD) or date range (start_date, end_date)"],"input_types":["base_currency: string","currencies: comma-separated string or list","date: string (YYYY-MM-DD) OR start_date and end_date for ranges"],"output_types":["JSON object with keys: base, start_date, end_date, rates (dict of date->rates), or single date with rates"],"categories":["data-processing-analysis","memory-knowledge"],"confidence":0.5,"matches":0,"success_rate":0},{"id":"awesome-frankfurtermcp__cap_4","uri":"capability://data.processing.analysis.currency.conversion.with.historical.rates","name":"currency conversion with historical rates","description":"Implements convert_currency_specific_date tool that performs currency conversion using historical exchange rates for a specified date. Accepts amount, source currency, target currency, and date parameters. Internally calls get_historical_exchange_rates and applies the rate from that date, returning the converted amount and the historical rate used. Results are cached using the same LRU strategy as get_historical_exchange_rates.","intents":["I want to convert 100 USD to EUR as it would have been on January 15, 2023","I need to calculate the historical cost of a transaction in a different currency","I want to analyze how currency fluctuations would have affected a past transaction"],"best_for":["Historical financial analysis and reporting","Audit trails and compliance workflows requiring past conversion rates","Agents analyzing multi-currency transactions from past dates"],"limitations":["Subject to LRU cache eviction (1024 items) — repeated queries for different dates may evict earlier results","Historical data limited to Frankfurter API coverage (typically 1999+)","No support for intraday rates (only daily rates available)","Dates must be valid trading days; non-trading dates may return nearest available rate or error"],"requires":["Python 3.12+","fastmcp>=2.13.1","Valid ISO 4217 currency codes","Date in ISO 8601 format (YYYY-MM-DD)","Numeric amount"],"input_types":["amount: float or int","source_currency: string (ISO 4217)","target_currency: string (ISO 4217)","date: string (YYYY-MM-DD)"],"output_types":["JSON object with keys: amount, from_currency, to_currency, converted_amount, rate, date, timestamp"],"categories":["data-processing-analysis","tool-use-integration"],"confidence":0.5,"matches":0,"success_rate":0},{"id":"awesome-frankfurtermcp__cap_5","uri":"capability://search.retrieval.supported.currency.enumeration","name":"supported currency enumeration","description":"Implements get_supported_currencies tool that returns a list of all ISO 4217 currency codes supported by the Frankfurter API. This is a lightweight, read-only operation that queries the Frankfurter API's /currencies endpoint and returns a structured list of currency codes and names. No caching is applied since the supported currency set changes infrequently.","intents":["I want to show a user which currencies are available for conversion","I need to validate that a user-provided currency code is supported before attempting conversion","I want to populate a dropdown or autocomplete list of available currencies in my agent"],"best_for":["User-facing agents that need to display available currency options","Validation logic in agents that must check currency code validity","Multi-currency applications requiring a reference list of supported currencies"],"limitations":["No caching — every call hits the Frankfurter API (lightweight endpoint, but adds latency)","Returns only currency codes and names; no metadata like decimal places or symbols","Supported currencies are determined by Frankfurter API (typically 30-50 major currencies)"],"requires":["Python 3.12+","fastmcp>=2.13.1","Network access to Frankfurter API"],"input_types":[],"output_types":["JSON object with keys: currencies (dict of code->name)"],"categories":["search-retrieval","data-processing-analysis"],"confidence":0.5,"matches":0,"success_rate":0},{"id":"awesome-frankfurtermcp__cap_6","uri":"capability://memory.knowledge.dual.layer.caching.with.ttl.and.lru.strategies","name":"dual-layer caching with ttl and lru strategies","description":"Implements a hybrid caching architecture that uses TTL (time-to-live) caching for recent exchange rates (15-minute expiry) and LRU (least-recently-used) caching for historical queries (1024-item capacity). This design recognizes that recent rates need freshness guarantees while historical data is immutable and benefits from long-term caching. Caching is transparent to tool callers and automatically managed by the FrankfurterMCP class.","intents":["I want to reduce API calls when agents make multiple currency queries in quick succession","I need recent rates to be fresh (within 15 minutes) but historical rates to be cached indefinitely","I want predictable cache behavior without configuring external cache systems like Redis"],"best_for":["Single-server deployments (Claude Desktop, local VS Code, standalone MCP servers)","Agents with high-frequency currency queries that would otherwise overwhelm the Frankfurter API","Applications where 15-minute staleness for recent rates is acceptable"],"limitations":["In-process memory only — cache is lost on server restart","No distributed caching — each server instance maintains its own cache (not suitable for multi-instance deployments)","TTL cache has no manual invalidation — stale data persists until expiry","LRU cache limited to 1024 items — large workloads may evict frequently-used historical queries"],"requires":["Python 3.12+","fastmcp>=2.13.1","Sufficient memory for in-process cache (typically <10MB for typical usage)"],"input_types":[],"output_types":[],"categories":["memory-knowledge","automation-workflow"],"confidence":0.5,"matches":0,"success_rate":0},{"id":"awesome-frankfurtermcp__cap_7","uri":"capability://tool.use.integration.multi.transport.mcp.server.deployment","name":"multi-transport mcp server deployment","description":"Implements FrankfurterMCP as a FastMCP-based server that supports multiple transport protocols: stdio (for local desktop integrations like Claude Desktop and VS Code) and HTTP-based transports (SSE and streamable-http for cloud and browser-based clients). Transport selection is configured at deployment time, allowing the same server code to run in different environments without modification.","intents":["I want to run the currency MCP server locally in Claude Desktop via stdio transport","I want to deploy the MCP server to a cloud platform and access it from a browser-based client via HTTP","I want to integrate the MCP server into VS Code as a local extension"],"best_for":["Developers integrating with Claude Desktop or VS Code (stdio transport)","Teams deploying MCP servers to cloud platforms (HTTP transports)","Organizations requiring both local and remote MCP server deployments"],"limitations":["Stdio transport is single-connection only (suitable for desktop clients, not multi-user)","HTTP transports require network configuration and security considerations (no built-in authentication)","Transport selection is deployment-time configuration; runtime switching not supported"],"requires":["Python 3.12+","fastmcp>=2.13.1","For stdio: Claude Desktop or VS Code with MCP support","For HTTP: Web server or cloud platform (Docker, serverless, etc.)"],"input_types":[],"output_types":[],"categories":["tool-use-integration","automation-workflow"],"confidence":0.5,"matches":0,"success_rate":0},{"id":"awesome-frankfurtermcp__cap_8","uri":"capability://tool.use.integration.async.tool.registration.with.mcp.annotations","name":"async tool registration with mcp annotations","description":"Implements all five currency tools as async methods registered with FastMCP framework using MCP tool annotations. Each tool is decorated with readOnlyHint: True (indicating read-only operations) and openWorldHint: True (indicating external API access). This enables MCP clients to understand tool semantics and make informed decisions about tool invocation, error handling, and caching.","intents":["I want MCP clients to understand that currency tools are read-only and safe to invoke","I want clients to know that tools access external services (Frankfurter API) and may have latency","I want to enable clients to optimize tool invocation based on semantic hints"],"best_for":["MCP client developers building intelligent tool orchestration","Agents that need to reason about tool safety and external dependencies","Systems implementing tool caching or batching strategies"],"limitations":["Annotations are hints only — clients may ignore them","No fine-grained permission model (all tools marked read-only; no per-tool access control)","No built-in rate limiting or quota enforcement (annotations don't prevent abuse)"],"requires":["Python 3.12+","fastmcp>=2.13.1","MCP-aware client that understands readOnlyHint and openWorldHint annotations"],"input_types":[],"output_types":[],"categories":["tool-use-integration","safety-moderation"],"confidence":0.5,"matches":0,"success_rate":0}],"trust":{"score":30,"verified":false,"data_access_risk":"moderate","permissions":["Python 3.12 or 3.13","fastmcp>=2.13.1","Network access to https://api.frankfurter.app","MCP client (Claude Desktop, VS Code with MCP extension, or HTTP transport)","Python 3.12+","Network connectivity to Frankfurter API","Base currency code (ISO 4217) and target currency codes","Valid ISO 4217 currency codes for source and target","Numeric amount (positive, no currency symbol)","Valid ISO 4217 currency codes"],"failure_modes":["Depends on Frankfurter API availability and rate limits (no built-in rate limiting in MCP server itself)","Historical data limited to what Frankfurter API provides (typically ECB historical rates)","No built-in authentication for Frankfurter API (public endpoint, but subject to upstream changes)","15-minute cache TTL means rates are not real-time (up to 15 minutes stale)","Cache is in-process memory only — no persistence across server restarts","No cache invalidation mechanism if upstream rates change unexpectedly","Subject to same 15-minute cache staleness as get_latest_exchange_rates","No support for mid-market vs bid/ask spreads (uses single rate from ECB)","Rounding behavior depends on Frankfurter API precision (typically 4-6 decimal places)","LRU cache limited to 1024 items — large date ranges or many unique queries will evict older entries","builder identity is not verified yet","no observed match outcomes yet"],"rank_breakdown":{"adoption":0.05,"quality":0.43,"ecosystem":0.39999999999999997,"match_graph":0.25,"freshness":0.52,"weights":{"adoption":0.25,"quality":0.25,"ecosystem":0.15,"match_graph":0.23,"freshness":0.12}},"observed_outcomes":{"matches":0,"success_rate":0,"avg_confidence":0,"top_intents":[],"last_matched_at":null},"maintenance":{"status":"active","updated_at":"2026-06-17T09:51:03.040Z","last_scraped_at":"2026-05-03T14:00:15.503Z","last_commit":null},"community":{"stars":null,"forks":null,"weekly_downloads":null,"model_downloads":null,"model_likes":null}},"distribution":{"claim_url":"https://unfragile.ai/submit?claim=frankfurtermcp","compare_url":"https://unfragile.ai/compare?artifact=frankfurtermcp"}},"signature":"ha8Mvye/Dr0pHO25weTp1vdJedzx7c7sieXYKkkFo0sYP3qvf9uyY32zgwjT2acLfXZkjNP6q2ukQDh+5x0IDw==","signedAt":"2026-06-22T01:48:59.376Z","signedBy":"unfragile.ai","version":1},"_links":{"self":"https://unfragile.ai/api/v1/passport/frankfurtermcp","artifact":"https://unfragile.ai/frankfurtermcp","verify":"https://unfragile.ai/api/v1/verify?slug=frankfurtermcp","publicKey":"https://unfragile.ai/api/v1/trust-passport-public-key","spec":"https://unfragile.ai/trust","schema":"https://unfragile.ai/schema.json","docs":"https://unfragile.ai/docs"}}