Skip to main content
Glama
hemmiles-mcp-server

hemmiles-mcp-server

by MeruLocal

Hemmiles MCP Server

An unofficial, read-only Model Context Protocol server that lets MCP clients (Claude Desktop, MCP Inspector, etc.) query the public hemmiles.com website through structured tools.

Important — what Hemmiles actually is. The site was inspected directly before any code was written. Hemmiles is not an online store. It is the marketing website for Hemmiles, a B2B SaaS "field‑visit / field‑sales management" product (visit planning, route planning, GPS check‑in, photos & notes, follow‑ups, manager dashboard, reports). There is no product catalog, cart, checkout, stock, or customer reviews. This server therefore exposes the site's real capabilities — content, features, pricing, resources, FAQs, and company/contact info — and does not fake e‑commerce actions that the site does not support. See Tool mapping and Known limitations.


Table of contents


Related MCP server: HitKeep

Verified site findings (Stage 1)

Check

Result

GET /products.json (Shopify probe)

Next.js 404 (__next_error__, /_next/static/…) → not Shopify / WooCommerce

Platform

Next.js (App Router), React Server Components streamed into server‑rendered HTML

robots.txt

Allow: /, Disallow: /api/ for all agents → the server never requests /api/

sitemap.xml

Index → pages.xml, markets.xml, resources.xml (~31 canonical pages)

Root /

HTTP 307 geo‑redirect to a locale (e.g. /in); redirects must be followed

Locales

global, in, us, gb, ca, au, nz, ie, sg, ae, za

Structured data

Rich JSON‑LD on every page: SoftwareApplication (name, featureList, offers[]), Organization (email, contact points), WebPage, FAQPage, BreadcrumbList

Pricing

Per user / month, locale‑specific currency (e.g. India ₹3,500 / US $39 Starter). Monthly + annual billing in offers[].priceSpecification[]

Reliability

Intermittent ECONNRESET (rate‑limiting) → retry/backoff + conservative throttling required

Because content and pricing are delivered as JSON‑LD inside server‑rendered HTML, plain fetch is sufficient — Playwright is not used.

Architecture

  • TypeScript + Node 18+, ESM.

  • Official MCP SDK (@modelcontextprotocol/sdk), tools registered with registerTool (Zod input + output schemas, annotations, structuredContent).

  • stdio transport by default (for Claude Desktop); optional Streamable HTTP (HEMMILES_TRANSPORT=http).

  • HemmilesClient — the single network gateway:

    • SSRF‑safe: HTTPS only, host allowlisted to hemmiles.com, every redirect hop re‑validated, /api/ refused.

    • Resilient: per‑request timeout (AbortController), retry with exponential backoff on transient errors (ECONNRESET / 5xx / 429), manual redirect following.

    • Conservative rate limiting (serialized requests with a configurable minimum interval) + in‑memory TTL cache.

  • product-normalizer — pure, JSON‑LD‑first extraction (via cheerio), unit‑tested with fixtures.

  • No secrets, no credentials, no writes, no transactions.

Tools

All tools are read‑only (readOnlyHint: true) and support response_format: "markdown" | "json". Locale defaults to the server's configured locale (in out of the box).

Tool

Purpose

hemmiles_list_pages

Enumerate site pages by section (from the live sitemap).

hemmiles_get_page

Full normalized content of one page: title, description, headings, breadcrumbs, links, JSON‑LD types, body text.

hemmiles_search_site

Keyword search across pages (slug + deep full‑text), ranked, with snippets & pagination.

hemmiles_list_features

The product's capabilities from SoftwareApplication.featureList, linked to feature pages.

hemmiles_get_pricing

Subscription plans for a market: price, currency, unit, user limits, monthly/annual billing.

hemmiles_list_resources

Guides, blog posts, docs/help hubs.

hemmiles_get_faqs

FAQ Q&A from a page's FAQPage JSON‑LD (pricing page has a detailed set).

hemmiles_get_company_info

Organization data: name, site, logo, support email, contact points.

hemmiles_get_policies

Security / privacy / terms / legal / cookies pages that actually exist.

hemmiles_get_contact_options

Official demo / contact / sales links + support email (the safe alternative to cart/checkout).

Tool mapping

How the original e‑commerce brief maps onto this SaaS site:

Brief tool

Status

Implemented as

search_products

✅ remapped

hemmiles_search_site

get_product_details

✅ remapped

hemmiles_get_page

list_categories

✅ remapped

hemmiles_list_pages

get_featured_products

✅ remapped

hemmiles_list_features

get_product_price

✅ remapped

hemmiles_get_pricing

get_store_information

✅ remapped

hemmiles_get_company_info

get_return_policy / get_shipping_information

⚠️ partial

hemmiles_get_policies — no shipping/returns exist for a digital SaaS; billing/trial terms are in hemmiles_get_faqs. Documented, not faked.

get_product_reviews

❌ not implemented

No public reviews/testimonials in the site's structured data.

check_product_availability

❌ not implemented

No stock/inventory concept (SaaS). Plan availability is reflected in hemmiles_get_pricing (availability field).

add_to_cart, get_cart, remove_from_cart, create_checkout_link

❌ not implemented

No cart or checkout exists. Use hemmiles_get_contact_options to reach the official demo/sales flow. The server never performs transactions or submits forms.

Install & build

Requires Node.js ≥ 18.

npm install
npm run build

This compiles TypeScript to dist/, with the entry point at dist/index.js.

Run

# stdio (default)
npm start

# Streamable HTTP on :3000 (POST JSON-RPC to /mcp)
HEMMILES_TRANSPORT=http PORT=3000 npm start

# Development (auto-reload, no build needed)
npm run dev

# Explore interactively with the MCP Inspector
npm run inspector

Startup logs go to stderr only, so the stdio JSON‑RPC stream stays clean.

HTTP endpoints

When running with HEMMILES_TRANSPORT=http, the following informational endpoints are served alongside MCP (which stays on POST /mcp):

Method & path

Returns

GET /

HTML landing page (overview, endpoints, tool list, markets) — open it in a browser

GET /health, GET /healthz

Liveness JSON {status:"ok", version, uptimeSeconds, …}

GET /version

Version/protocol JSON

GET /.well-known/mcp.json

Discovery doc (transport, endpoint, tool names)

POST /mcp

MCP JSON-RPC (Streamable HTTP)

curl http://localhost:3001/health
# {"status":"ok","name":"hemmiles-mcp-server","version":"1.0.0",
#  "transport":"http","locale":"in","uptimeSeconds":6,"mcpEndpoint":"/mcp"}

Open http://localhost:3001/ in a browser to see the landing page. (stdio transport has no HTTP endpoints; its health is simply that the process is running and tools/list responds.)

Connect to Claude Desktop

  1. npm install && npm run build.

  2. Open Claude Desktop → Settings → Developer → Edit Config (this opens claude_desktop_config.json).

  3. Add the server using the absolute path to the compiled entry point, then restart Claude Desktop.

Windows (this machine's path):

{
  "mcpServers": {
    "hemmiles": {
      "command": "node",
      "args": ["C:\\Users\\Hp\\Desktop\\Hemmiles_MCP\\dist\\index.js"],
      "env": {
        "HEMMILES_DEFAULT_LOCALE": "in"
      }
    }
  }
}

macOS / Linux (adjust the path):

{
  "mcpServers": {
    "hemmiles": {
      "command": "node",
      "args": ["/absolute/path/to/Hemmiles_MCP/dist/index.js"],
      "env": { "HEMMILES_DEFAULT_LOCALE": "us" }
    }
  }
}

After restarting, the 🔌 tools menu will list the hemmiles_* tools.

Configuration

All environment variables are optional (no secrets required). See .env.example.

Variable

Default

Meaning

HEMMILES_TRANSPORT

stdio

stdio or http

PORT

3000

HTTP transport port

HEMMILES_DEFAULT_LOCALE

in

Default market (global,in,us,gb,ca,au,nz,ie,sg,ae,za)

HEMMILES_TIMEOUT_MS

20000

Per‑request timeout (1000–60000)

HEMMILES_MAX_RETRIES

3

Retries for transient errors (0–5)

HEMMILES_MIN_REQUEST_INTERVAL_MS

600

Minimum spacing between requests

HEMMILES_CACHE_TTL_SECONDS

300

In‑memory cache TTL (0 disables)

HEMMILES_USER_AGENT

hemmiles-mcp-server/1.0 …

Outbound User‑Agent

Example conversations

Discover and price:

User: What does Hemmiles do, and how much is it in India? Claude: (calls hemmiles_list_features → Visit planning, Route planning, GPS check‑in, Photos & notes, Follow‑ups, Offline mode, Manager dashboard, Reports; then hemmiles_get_pricing {locale:"in"}) Hemmiles is field‑visit software… India pricing is Starter ₹3,500, Professional ₹4,500, Enterprise ₹8,000 per user/month (annual billing is cheaper), with a 14‑day free trial.

Research a capability:

User: Does it work without signal? Show me the details. Claude: (hemmiles_search_site {query:"offline"} → features/offline-mode, then hemmiles_get_page {path:"features/offline-mode"}) Yes — Offline mode lets reps keep working without signal and syncs later…

Get in touch:

User: How do I get a demo? Claude: (hemmiles_get_contact_options) Book a demo at https://hemmiles.com/in/demo, or email hello@hemmiles.com. (The server only returns official links; it doesn't submit anything for you.)

Example tool calls

MCP tools/call request and the resulting structuredContent (abridged, verified against the live site):

// hemmiles_get_pricing
{ "name": "hemmiles_get_pricing", "arguments": { "locale": "in", "response_format": "json" } }
// → structuredContent:
{
  "url": "https://hemmiles.com/in/pricing",
  "locale": "in",
  "currency": "INR",
  "plans": [
    { "name": "Starter plan", "price": "3500", "priceCurrency": "INR",
      "unit": "per user per month", "minUsers": 3, "maxUsers": 10,
      "availability": "https://schema.org/InStock",
      "billing": [ { "name": "Monthly billing", "price": "3500" },
                   { "name": "Annual billing",  "price": "2900" } ] }
    // … Professional, Enterprise
  ]
}
// hemmiles_search_site
{ "name": "hemmiles_search_site",
  "arguments": { "query": "offline", "locale": "in", "limit": 3, "response_format": "json" } }
// → results[0]: { "url": ".../in/features/offline-mode", "section": "features",
//                 "score": 19, "title": "Offline mode for field teams in India", "snippet": "…" }
// hemmiles_get_company_info  →  { "name": "Hemmiles", "email": "hello@hemmiles.com",
//   "url": "https://hemmiles.com", "contactPoints": [ { "contactType": "sales", "url": ".../demo" } ] }

Testing

npm test        # unit tests (no network): validation, SSRF, normalizer, formatting
npm run typecheck

The unit tests use HTML fixtures whose structure mirrors the live site (JSON‑LD with numeric prices, array priceSpecification, FAQPage, Organization) but with test values. SSRF/robots rejections are asserted to happen before any network call.

Security & compliance

  • Read‑only. No writes, purchases, sign‑ins, form submissions, or transactions.

  • robots.txt respected. /api/ is never requested.

  • SSRF‑hardened. HTTPS + hemmiles.com only; every redirect hop re‑validated; arbitrary‑URL fetching is impossible.

  • No sensitive logging. No credentials exist; request logs avoid bodies.

  • Rate‑limited & cached to be a good citizen of the site.

  • Unofficial and not affiliated with Hemmiles.

Known limitations

  • Not an e‑commerce integration — no products/cart/checkout/reviews/stock, because the site has none. See Tool mapping.

  • Pricing reflects the publicly displayed list price only (monthly + annual as published); negotiated/promo pricing isn't exposed.

  • Search ranks by keyword relevance across titles/descriptions/slugs/body; deep full‑text fetching is bounded (MAX_SEARCH_FETCH) to limit load, so very long‑tail matches on huge sites could be capped (the site is small, ~31 canonical pages).

  • Content changes on the live site can change returned text; schema types are stable but values are live.

  • Relies on the site's JSON‑LD; if a page omits structured data, tools fall back to DOM parsing and may return less detail.

Troubleshooting

Symptom

Fix

NETWORK / TIMEOUT errors

The site rate‑limits and occasionally resets connections. Retry; the client already backs off. Raise HEMMILES_TIMEOUT_MS / HEMMILES_MAX_RETRIES.

NOT_FOUND

The path doesn't exist for that locale. Use hemmiles_list_pages / hemmiles_search_site to find valid paths, or try locale:"global".

DISALLOWED_PATH

You asked for a robots‑blocked path (e.g. /api/…). This is intentional and cannot be overridden.

Server not visible in Claude Desktop

Ensure npm run build ran, the args path is absolute and uses escaped backslashes on Windows, then fully restart Claude Desktop.

Empty pricing plans

A locale page may lack offer JSON‑LD; the tool returns the page URL so you can view it directly.

Project structure

Hemmiles_MCP/
├── package.json
├── tsconfig.json
├── .env.example
├── .gitignore
├── LICENSE
├── README.md
├── src/
│   ├── index.ts                  # entry point + transport selection
│   ├── server.ts                 # wires config → client → tools
│   ├── config.ts                 # env configuration
│   ├── constants.ts              # hosts, locales, page list, limits
│   ├── schemas/product.ts        # Zod input + output schemas
│   ├── services/
│   │   ├── hemmiles-client.ts    # SSRF-safe fetch, retry, rate limit, cache
│   │   ├── product-normalizer.ts # pure JSON-LD / HTML extraction
│   │   └── sitemap.ts            # sitemap discovery + fallback
│   ├── tools/
│   │   ├── index.ts  pages.ts  search.ts  features.ts
│   │   ├── pricing.ts  resources.ts  store.ts  helpers.ts
│   └── utils/
│       ├── errors.ts  validation.ts  format.ts
└── tests/
    ├── fixtures.ts
    ├── validation.test.ts  normalizer.test.ts
    ├── client.test.ts  format.test.ts

Use as a plugin

This repo ships an Open Plugins component at .mcp.json, so any MCP client that reads plugin repos can pick the server up directly. It points at the hosted, read-only endpoint:

{
  "mcpServers": {
    "hemmiles": {
      "type": "http",
      "url": "https://mcp.hemmiles.com/mcp"
    }
  }
}

No API key is required — the server holds no customer data and performs no write actions. To run it yourself instead, see the stdio and HTTP instructions above.

License

MIT — see LICENSE.

Available Tools

10 tools
hemmiles_get_company_infoGet Hemmiles company infoA
Read-onlyIdempotent

Return Hemmiles' public company and contact information, parsed from the site's Organization JSON-LD: name, website, logo, support email, description, social profiles, and structured contact points (support, sales, etc.).

This is the brief's "get_store_information" for a SaaS vendor.

Args:

  • locale (optional): which market's page to read (org data is global; default: server locale).

  • response_format ('markdown'|'json').

Returns JSON: { name, url, logo, email, description, sameAs:[], contactPoints:[{ contactType, email, telephone, url }] }.

Example: "How do I contact Hemmiles?" / "Who makes Hemmiles?".

Inputs: locale, response_format. Returns: url, logo, name, email, +3 more

hemmiles_get_contact_optionsGet Hemmiles contact & demo optionsA
Read-onlyIdempotent

Return the official, supported ways to engage with Hemmiles: the sales/demo request page, the general contact page, and the support email — assembled from the site's Organization contact points and known pages.

Why this instead of cart/checkout: Hemmiles has no online store, cart, or self-serve checkout, so the brief's add_to_cart / get_cart / remove_from_cart / create_checkout_link tools are not implemented. This tool is the safe, legitimate alternative — it only returns official links and never performs any transaction or submits any form.

Args:

  • locale (optional): market prefix for the page links (default: server locale).

  • response_format ('markdown'|'json').

Returns JSON: { email?, demoUrl, contactUrl, pricingUrl, salesContactUrl?, note }.

Inputs: locale, response_format. Returns: note, email, demoUrl, contactUrl, +2 more

hemmiles_get_faqsGet Hemmiles FAQsA
Read-onlyIdempotent

Return the frequently-asked-questions published on a Hemmiles page, parsed from its FAQPage JSON-LD. The pricing page in particular carries detailed FAQs (billing, user minimums, trials, etc.).

Args:

  • path (string, default 'pricing'): page to read FAQs from (path or full URL).

  • locale (optional): market prefix for a bare path.

  • response_format ('markdown'|'json').

Returns JSON: { url, total, faqs: [{ question, answer }] }.

Example: "What are Hemmiles' pricing FAQs?" -> path='pricing'.

Inputs: path, locale, response_format. Returns: url, faqs, total

hemmiles_get_pageGet a Hemmiles pageA
Read-onlyIdempotent

Fetch a single hemmiles.com page and return its normalized content: title, description, headings, breadcrumbs, in-page links, the detected JSON-LD schema types, and the main body text.

This is the detail view — the brief's "get_product_details" — adapted to a SaaS marketing site. For pricing use hemmiles_get_pricing; for FAQs use hemmiles_get_faqs.

Args:

  • path (string): page path (e.g. 'features/route-planning', 'product') OR a full https://hemmiles.com URL.

  • locale (optional): market prefix for a bare path (default: server locale). Ignored for full URLs.

  • response_format ('markdown'|'json').

Returns JSON: { url, path, locale, title, description, headings:[{level,text}], breadcrumbs:[], jsonldTypes:[], links:[{text,href}], text }.

Error handling:

  • NOT_FOUND if the page does not exist — use hemmiles_list_pages / hemmiles_search_site to find valid paths.

  • DISALLOWED_PATH for robots-blocked paths such as /api/...

Inputs: path (required), locale, response_format. Returns: url, path, text, links, +6 more

hemmiles_get_policiesGet Hemmiles policiesA
Read-onlyIdempotent

Fetch Hemmiles' publicly available policy pages (security, privacy, terms, legal, cookies) and return their summaries.

Important: Hemmiles is a digital SaaS subscription, so there is NO shipping policy and NO product return/refund policy in the e-commerce sense (the brief's get_shipping_information / get_return_policy do not apply). Billing, trial, and cancellation terms are covered by pricing FAQs (hemmiles_get_faqs) and the terms page when present. This tool reports only the policy pages that actually exist; missing ones are listed as unavailable.

Args:

  • topic ('all'|'security'|'privacy'|'terms'|'legal'|'cookies', default 'all').

  • locale (optional): market prefix (falls back to the global page if the localized one is absent).

  • response_format ('markdown'|'json').

Returns JSON: { note, found: [{ topic, url, title, description, excerpt }], unavailable: string[] }.

Inputs: topic, locale, response_format. Returns: note, found, unavailable

hemmiles_get_pricingGet Hemmiles pricingA
Read-onlyIdempotent

Get Hemmiles subscription pricing for a market, parsed from the pricing page's schema.org Offer data.

Pricing is per user per month and varies by locale/currency (for example, India is billed in INR, the US in USD). Always pass the locale you care about.

Args:

  • locale (optional): market to price (default: server locale). One of global/in/us/gb/ca/au/nz/ie/sg/ae/za.

  • response_format ('markdown'|'json').

Returns JSON: { url, locale, currency, summary, plans: [{ id, name, price, priceCurrency, unit, description, url }] }.

Example: "How much is Hemmiles in India?" -> locale='in'. Note: this reports the publicly displayed list price only; it does not include negotiated, annual-discount, or promotional pricing beyond what the page states.

Inputs: locale, response_format. Returns: url, plans, locale, summary, +1 more

hemmiles_list_featuresList Hemmiles product featuresA
Read-onlyIdempotent

List the Hemmiles product's capabilities (the "featured" items on a SaaS site), taken from the site's SoftwareApplication JSON-LD feature list and linked to each feature's dedicated page when one exists.

Args:

  • locale (optional): market whose feature-page URLs to return (default: server locale).

  • response_format ('markdown'|'json').

Returns JSON: { total, features: [{ name, url? }] }. Typical features include Visit planning, Route planning, GPS check-in, Photos & notes, Follow-ups, Offline mode, Manager dashboard, Reports.

Example: "What can Hemmiles do?" / "List Hemmiles features".

Inputs: locale, response_format. Returns: total, features

hemmiles_list_pagesList Hemmiles pagesA
Read-onlyIdempotent

List the public pages of hemmiles.com, grouped by section, as discovered from the site's sitemap.

Hemmiles is field-visit / field-sales SaaS (not an online store), so this returns marketing and documentation pages — the closest equivalent to "categories". Sections include: home, product, pricing, features, teams, integrations, security, resources, docs, help, guides, blog, company.

Args:

  • section (string, optional): restrict to one section (e.g. 'features').

  • locale ('global'|'in'|'us'|'gb'|'ca'|'au'|'nz'|'ie'|'sg'|'ae'|'za', optional): which market's URLs to return; defaults to the server's locale.

  • response_format ('markdown'|'json'): output format (default markdown).

Returns JSON: { total, count, sections: string[], pages: [{ url, path, section, locale }] }.

Examples:

  • "What pages does Hemmiles have?" -> no args.

  • "List the feature pages" -> section='features'.

Inputs: locale, section, response_format. Returns: count, pages, total, sections

hemmiles_list_resourcesList Hemmiles resourcesA
Read-onlyIdempotent

List Hemmiles resource content: guides, blog posts, and the resources/docs/help hubs, as discovered from the sitemap.

Args:

  • kind ('all'|'guides'|'blog'|'resources'|'docs'|'help', default 'all').

  • locale (optional): market whose URLs to return (default: server locale).

  • response_format ('markdown'|'json').

Returns JSON: { total, count, pages: [{ url, path, section, locale, title? }] }.

Example: "What guides does Hemmiles have?" -> kind='guides'.

Inputs: kind, locale, response_format. Returns: count, pages, total

hemmiles_search_siteSearch Hemmiles siteA
Read-onlyIdempotent

Search hemmiles.com for pages matching a keyword query.

Because Hemmiles is a SaaS marketing site (no shopping catalog), this searches content pages — features, teams/use-cases, guides, blog posts, docs, pricing, etc. — rather than purchasable products.

Args:

  • query (string): keywords to match (2–100 chars).

  • section (string, optional): restrict to one section (e.g. 'guides', 'features').

  • locale (optional): market whose URLs to return (default: server locale).

  • deep (boolean, default true): fetch page bodies for full-text matches + snippets. Set false for a fast slug-only match.

  • limit (1–50, default 20), offset (default 0): pagination.

  • response_format ('markdown'|'json').

Returns JSON: { query, total, count, offset, has_more, next_offset?, results: [{ url, path, section, title, score, snippet }] }.

Examples:

  • "offline" -> finds features/offline-mode and the offline-first blog post.

  • "medical reps" with section='teams'.

Note: results are ranked by keyword relevance in titles, descriptions, slugs and body text; scores are relative, not absolute.

Inputs: query (required), deep, limit, locale, +3 more. Returns: count, query, total, offset, +3 more

Tool Schema Changelog

Recent tool additions, removals, and schema changes observed during successful MCP inspections.

Loading tool schema changelog…

    TDQS

    A4.1/5.0

    Scored across 10 tools

    Disambiguation4/5

    Each tool maps to a distinct slice of the site (pages, search, features, pricing, resources, FAQs, policies, contact, company info), and descriptions explicitly cross-reference each other (e.g. get_page points to get_pricing/get_faqs). The only residual overlap is that get_page can return much of what get_pricing, get_faqs, and get_policies would, and get_company_info vs get_contact_options both surface contact data, but the guidance is clear enough that an agent can choose correctly.

    Naming Consistency5/5

    All ten tools use the same prefixed verb_noun snake_case pattern (hemmiles_get_*, hemmiles_list_*, hemmiles_search_*), with get_ for single-resource fetch, list_ for collections, and search_ for queries used consistently and semantically. No mixed conventions or casing deviations.

    Tool Count5/5

    Ten tools is well within the ideal 3-15 range and each corresponds to a real, non-redundant surface of a marketing/docs site. Nothing feels padded; each tool earns its place.

    Completeness4/5

    The surface covers discovery (list_pages, list_resources), retrieval (get_page), search, and the key content verticals (features, pricing, FAQs, policies, contact, company info), which is essentially full lifecycle for a read-only site server. Minor gaps: no way to enumerate integrations or teams/use-case pages as first-class lists, and no direct docs/help retrieval beyond get_page.

    Maintenance

    ActivityMaintained
    ResponsivenessNo recent community issues

    Related MCP Connectors

    Related MCP Servers

    • A
      license
      A
      quality
      A
      maintenance
      Read-only MCP server for aggregate HitKeep analytics and official documentation, including traffic, events, goals, funnels, ecommerce, Search Console, and AI visibility reporting.
      16
      105
      MIT
    • A
      license
      Not graded
      quality
      C
      maintenance
      Read-only MCP server for the public EasyHire job board. Enables searching job openings, retrieving full postings, filtering by criteria, and listing countries with open roles.
      MIT
    • F
      license
      Not graded
      quality
      C
      maintenance
      Remote MCP server of Aureum Technology GmbH (IT service provider, Rodewisch/Vogtland, Germany): company and contact data, service catalogue, current prices and full-text search across aureum-tech.com for AI assistants. Streamable HTTP at https://aureum-tech.com/mcp, read-only, no authentication.
      -