Skip to main content
Glama

tuma250-mcp

PyPI version

An MCP server for the Tuma 250 grocery site (Kigali, Rwanda).

Gives any MCP-compatible AI client (Cursor, Claude Desktop, etc.) the ability to search products, manage a shopping cart, and browse order history on Tuma250 — using a headless Playwright browser under the hood.

Example uses

Imported as MCP server in Perplexity (or any other MCP-compatible client)

Tuma250 MCP diagram

Imported as a skill in OpenClaw

The skill definition can be copied from skills/tuma250/SKILL.md (requires the mcporter skill to be enabled, and the MCP server added to its configuration)

Tuma250 Skill

Related MCP server: Instacart MCP Server

Tools

Tool

Description

login

Authenticate and persist the browser session

search_products

Search for products by keyword

get_product_variations

List available variants (size/weight) for a variable product

add_to_cart

Add a product (or specific variant) to the cart

get_cart

Retrieve cart contents with full cost breakdown

list_recent_orders

List recent orders from My Account

get_order_details

Fetch line items for a specific order

Prerequisites

Playwright with one headless browser

npm i -g playwright
playwright install chromium

Configuration

The server reads credentials from environment variables (or a .env file):

TUMA250_BASE_URL=https://tuma250.com
TUMA250_USERNAME=your-email@example.com
TUMA250_PASSWORD=your-password

# Optional
TUMA250_SESSION_FILE=.tuma250_session.json  # persists login between runs
TUMA250_DEBUG=false                          # set true for headed browser

Usage

Cursor / Claude Desktop

Add to ~/.cursor/mcp.json / ~/Library/Application Support/Claude/claude_desktop_config.json:

{
  "mcpServers": {
    "tuma250": {
      "command": "uvx",
      "args": ["tuma250-mcp"],
      "env": {
        "TUMA250_BASE_URL": "https://tuma250.com",
        "TUMA250_USERNAME": "your-email@example.com",
        "TUMA250_PASSWORD": "your-password"
      }
    }
  }
}

Direct (stdio)

pip install tuma250-mcp
TUMA250_USERNAME=you@example.com TUMA250_PASSWORD=secret tuma250-mcp

Session persistence

After the first successful login, the browser session (cookies) is saved to TUMA250_SESSION_FILE (default: .tuma250_session.json). Subsequent runs reuse the saved session and skip the login step entirely.

Variable products

Some products on Tuma250 require a size/weight selection before they can be added to the cart. Pass the product slug (from search_products or get_order_details) and optionally variation_attributes:

1. search_products("fresh carrots")          → returns slug in each result
2. get_product_variations(product_url)       → lists 250g / 500g / 1kg variants
3. add_to_cart(product_slug, quantity=1, variation_attributes={"attribute_quantity": "500g"})

Development

# Clone and setup
uv venv
source .venv/bin/activate   # or: .venv\Scripts\activate on Windows
uv pip install -e ".[dev]"
playwright install chromium

# Run tests
pytest -v

Copy config-example.env to .env and fill in your Tuma250 credentials before running tests or the server locally.

To test from command line, you may use mcporter, e.g.:

npx mcporter call --stdio "uv run tuma250-mcp" get_cart
npx mcporter call --stdio "uv run tuma250-mcp" 'tuma250.get_order_details(order_id: "193457")'
npx mcporter call --stdio "uv run tuma250-mcp" 'tuma250.add_to_cart(product_slug: "ripe-mango-fruit-1kg")'
npx mcporter call --stdio "uv run tuma250-mcp" add_to_cart --args '{"product_slug": "viande-hachee-de-bouef-ordinaire-regular-ground-beef", "variation_attributes": {"attribute_weight":"1kg"}}'

License

MIT

Available Tools

7 tools
add_to_cartA

Add a product to the Tuma250 shopping cart.

Uses the product slug (from search_products URL or get_order_details). For variable products, pass variation_attributes so the page pre-selects the variant, e.g. {"attribute_quantity": "500g"}.

Args: product_slug: Product URL slug, e.g. "fresh-carrots-1kg" (from URL or get_order_details items). quantity: Number of units to add (default 1). variation_attributes: For variable products, attribute key/value pairs e.g. {"attribute_quantity": "500g"} (from get_order_details or get_product_variations raw_attributes).

Returns: dict containing: - success (bool): Whether the item was confirmed in the cart. - cart_total_items (int): Total number of line items in the cart. - cart_total_price (float | None): Cart grand total. - line_item_summary (list): Each item with id, slug, variation_attributes, name, qty.

ParametersJSON Schema
NameRequiredDescriptionDefault
quantityNo
product_slugYes
variation_attributesNo

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

A4.5/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations, the description carries full burden. It discloses the tool modifies the cart by adding items and returns a detailed response. It does not cover potential side effects like cart limits or authentication, but it is transparent about the core behavior.

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?

The description is well-structured with an arguments section and return value documentation. It is slightly long but every sentence adds value, and the main action is front-loaded.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given the presence of an output schema (though not shown), the description adequately explains return values and parameters. It covers all necessary information for using the tool effectively, given the context of sibling tools.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters5/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 0%, but the description compensates exceptionally well. It explains product_slug, quantity, and variation_attributes with examples and context on how to obtain them, adding significant meaning beyond the schema.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the tool adds a product to the Tuma250 shopping cart. It specifies the product slug and mentions variable products, distinguishing it from siblings like get_cart or search_products.

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?

The description provides guidance on when to use the tool, such as using product slug from search_products or get_order_details, and advises on variation_attributes for variable products. It lacks explicit when-not-to-use instructions but is otherwise clear.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

get_cartA

Retrieve the current contents of the Tuma250 shopping cart.

Returns: dict containing: - items (list): Each item with product_id, slug, variation_attributes, name, qty, price, subtotal. - total_items (int): Number of distinct line items. - subtotal (float | None): Items cost before shipping. - shipping_options (list): Available shipping methods with label and price. - total (float | None): Grand total including selected shipping.

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

A4.2/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

No annotations provided, so description bears full burden. It details the return structure (items, totals, shipping) and implies a read-only operation. However, it lacks disclosure on authentication requirements or potential side effects (though unlikely).

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?

Description is concise, front-loaded with purpose, and uses a bulleted list for return fields. Every sentence adds value, with no redundancy or fluff.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given zero parameters and existing output schema, the description provides rich context on the return value structure. It is mostly complete, though it could mention prerequisites (e.g., login) or state that cart persists per session.

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?

There are zero parameters (100% schema coverage), so the description correctly adds no parameter info. The high schema coverage places baseline at 4, and the description does not need to add more.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the tool retrieves the 'current contents of the Tuma250 shopping cart'. It uses a specific verb and resource, and clearly distinguishes from sibling tools like add_to_cart or list_recent_orders.

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 usage for viewing cart contents after adding items, but does not explicitly state when to use it or when not to use it compared to siblings. No exclusions or alternatives are mentioned.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

get_order_detailsA

Fetch the line items for a specific Tuma250 order.

Args: order_id: The WooCommerce order ID (from list_recent_orders).

Returns: dict containing: - order_id (str) - items (list): Each item with slug, variation_attributes, name, qty, price, brand, unit_size, category_path.

ParametersJSON Schema
NameRequiredDescriptionDefault
order_idYes

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

A4.3/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

No annotations are provided, so the description must fully disclose behavioral traits. The description states that the tool fetches data and returns a dict with specific fields. It implies a read-only operation but does not explicitly confirm no side effects, authentication needs, or rate limits. The description is adequate for a simple read operation but stops short of full behavioral transparency.

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?

The description is concise: one sentence for purpose, then an Args section and Returns section. No redundant words. The structure front-loads the main action and uses clear formatting. Every sentence adds value.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given that an output schema exists (signaled in context), the description still usefully outlines the return structure including fields like order_id, items, and their subfields. This provides enough detail for an agent to understand what to expect. The tool is simple (one required parameter, no undefined behavior), so the description is complete.

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?

The input schema only defines the parameter 'order_id' as a required string. The description adds essential context: 'The WooCommerce order ID (from list_recent_orders).' This tells the agent where to obtain the ID and reassures its format. Since schema description coverage is 0%, the description compensates well by providing this critical usage hint.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states 'Fetch the line items for a specific Tuma250 order.' It uses a specific verb ('fetch') and resource ('line items for a specific order'), and the tool name 'get_order_details' aligns perfectly. Among siblings like 'list_recent_orders' and 'get_cart', this tool's purpose is distinctly to get detailed order information for a single order.

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?

The description provides a clear usage hint by specifying that the order_id should come from 'list_recent_orders'. This implies a workflow sequence. However, it does not explicitly state when not to use this tool or mention any alternatives, so it misses explicit exclusions. The context signals show sibling tools that help define boundaries, but the description lacks a direct 'when to use' vs 'when not to use' statement.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

get_product_variationsA

Return the available variants for a variable WooCommerce product.

Call this when search_products returns a product and you need to know which size/weight options exist before adding it to the cart.

Args: product_url: Full product page URL (from search_products result["url"]).

Returns: list of variation objects, each containing: - variation_id (str): Pass this to add_to_cart. - attributes (dict): Human-readable attributes, e.g. {"quantity": "500g"}. - raw_attributes (dict): WooCommerce attribute keys, e.g. {"attribute_quantity": "500g"}. - price (float | None): Price for this variant. - in_stock (bool): Whether this variant is currently available. Returns an empty list for simple (non-variable) products.

ParametersJSON Schema
NameRequiredDescriptionDefault
product_urlYes

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A4.5/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations, the description fully describes the return format (list of variation objects with specific fields) and edge case behavior (returns empty list for simple products). It does not mention authentication needs or error handling, but the core behavioral traits are well covered.

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?

The description is concise with no wasted words. It uses clear section headers (Args, Returns) and front-loads the purpose and usage context. Every sentence adds value.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given the output schema exists and annotations are missing, the description provides a thorough explanation of the return values and their structure. It covers the tool's usage context, input source, and behavior for both variable and simple products, making it complete for this tool's needs.

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%, so the description must compensate. It explains the product_url parameter as 'Full product page URL (from search_products result["url"])', adding significant meaning beyond the schema's basic property definition.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the tool returns available variants for a variable WooCommerce product, with a specific verb ('Return') and resource ('available variants'). It distinguishes itself from sibling tools by indicating it should be called after search_products.

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?

The description explicitly states when to use this tool ('when search_products returns a product and you need to know which size/weight options exist before adding it to the cart'). It also provides context on the input (product_url from search_products result). It lacks explicit when-not or alternatives, but the context is clear and sufficient.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

list_recent_ordersA

List recent orders from the Tuma250 "My Orders" page.

Args: limit: Maximum number of orders to return (default 10).

Returns: list of order summary objects, each containing: - order_id (str | None) - date (str | None) - status (str | None) - total (float | None) - link (str | None): URL to the order detail page.

ParametersJSON Schema
NameRequiredDescriptionDefault
limitNo

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A3.9/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Without annotations, the description describes the return structure adequately but does not disclose behavioral traits like ordering (presumably by date), side effects, or prerequisites (e.g., login required).

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?

Concise, front-loaded purpose, followed by clearly labeled Args and Returns sections with no wasted words.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given the output schema is described and only one parameter, the description is mostly complete but lacks mention of ordering or authentication requirements.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters5/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The description adds 'Maximum number of orders to return' to the limit parameter, which is not present in the schema's title/type alone, fully explaining its meaning.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the verb 'list' and resource 'recent orders from the Tuma250 My Orders page', distinguishing it from siblings like get_order_details (single order) and other tools.

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 tool versus alternatives such as get_order_details for specific orders, or whether authentication via login is required.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

loginA

Ensure an authenticated session with the Tuma250 site.

Logs in using the configured credentials if the current session is not already authenticated. Subsequent tool calls auto-login as needed, so calling this tool explicitly is optional.

Returns: dict: {"success": bool, "message": str}

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

A4.7/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Discloses key behaviors: logs in only if not already authenticated, auto-login for other tools, returns success/message. Without annotations, this is sufficient, though could mention error handling more explicitly.

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?

Extremely concise: three sentences covering purpose, behavior, and return format. Every sentence adds value.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Complete for a simple authentication tool with zero parameters and a return dict. Output schema is implicitly described in the description text.

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?

With no parameters and 100% schema coverage, the description adds no param info but doesn't need to. Baseline 4 is appropriate.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

Clearly states that the tool ensures an authenticated session, explains it logs in using configured credentials if not already authenticated, and notes optionality. This distinguishes it from sibling tools which are all product/cart/order related.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Explicitly says when to use: optional because subsequent tool calls auto-login as needed. Provides clear guidance that calling this tool is not necessary in most cases.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

search_productsA

Search for products on the Tuma250 grocery site.

Args: query: Free-text search string, e.g. "butter 500g" or "rice 5kg". max_results: Maximum number of products to return (default 10).

Returns: list of product objects, each containing: - id (str | None): WooCommerce product ID. - name (str | None): Product display name. - brand (str | None): Brand name if available. - package_size (str | None): Package size / unit description. - price (float | None): Unit price. - url (str | None): Product page URL. - category_path (str | None): Category breadcrumb.

ParametersJSON Schema
NameRequiredDescriptionDefault
queryYes
max_resultsNo

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A4.2/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

No annotations are provided, so the description must disclose behavioral traits. It covers the return format and default behavior but does not explicitly state that the operation is read-only or mention authentication requirements. Given sibling tools include login, this is a notable gap, though the read-only nature is implied.

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?

The description is well-structured with a header, Args, and Returns sections. It is concise but includes necessary details; each sentence adds value. Minor redundancy: 'list of product objects' could be inferred from 'each containing,' but overall efficient.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given the tool's simplicity (2 params, no nested objects, output schema exists), the description covers purpose, parameters with examples, and return fields. It lacks error handling or edge case info, but for a straightforward search, this is adequate.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters5/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

With 0% schema coverage, the description fully compensates. It explains 'query' as a free-text search string with concrete examples, and 'max_results' as a maximum with default 10, adding meaning beyond the schema's titles and default value.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description explicitly states 'Search for products on the Tuma250 grocery site,' providing a clear verb (search) and resource (products) with site specificity. This distinguishes it from sibling tools like get_product_variations or login, which have different purposes.

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?

The description gives usage guidance with parameter examples ('e.g. "butter 500g" or "rice 5kg"') and explains the max_results default. However, it does not explicitly state when to use this tool versus alternatives, such as when a product ID is known (use get_product_variations). This omission prevents a higher score.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

TDQS

A4.3/5.0
Disambiguation5/5

Each tool has a clearly distinct purpose: authentication, product search, variation retrieval, cart addition, cart viewing, order listing, and order details. No overlap or ambiguity.

Naming Consistency5/5

All tool names follow a consistent verb_noun snake_case pattern (e.g., search_products, add_to_cart, list_recent_orders). Login is a simple verb but fits naturally.

Tool Count5/5

7 tools is well-scoped for an online grocery server. Each tool covers a necessary operation without redundancy or overwhelming number.

Completeness4/5

Covers product search, cart operations, and order history. Missing cart editing (remove/update items) and checkout, but the core workflow is supported. Minor gap.

Maintenance

ActivityMaintained
ResponsivenessSyncing

Resources

Unclaimed servers have limited discoverability.

Looking for Admin?

If you are the server author, to access and configure the admin panel.

Related MCP Connectors

Related MCP Servers

  • A
    license
    A
    quality
    D
    maintenance
    Enables AI assistants to shop on frisco.pl, Poland's online grocery store, with secure manual authentication. Supports product search, cart management, and checkout preparation via browser automation without storing login credentials.
    10
    7
    MIT
  • A
    license
    Not graded
    quality
    C
    maintenance
    Enables AI assistants to interact with Rohlik Group's online grocery delivery services across multiple countries, including product search, cart management, and account info.
    56
    119
    MIT

Latest Blog Posts

MCP directory API

We provide all the information about MCP servers via our MCP API.

curl -X GET 'https://glama.ai/api/mcp/v1/servers/Yann-J/tuma250_mcp'

If you have feedback or need assistance with the MCP directory API, please join our Discord server