Skip to main content
Glama

KOVA MCP

Sprich mit deinem myGEKKO. Ein Open-Source-MCP-Server, der Claude (und jeden anderen MCP-Client) mit myGEKKO-Gebäudereglern verbindet — über die offizielle myGEKKO Query API. Talk to your myGEKKO building controller from Claude — English quickstart below.

„Wie warm ist es im Wohnzimmer?" · „Welche Lichter sind noch an?" · „Mach die Rollläden im Süden runter." — in deinen Worten, direkt an dein Haus.

KOVA MCP ist das Werkzeug für Bastler und Power-User. Wer das täglich, am Handy und für die ganze Familie will — ohne Terminal: das ist die KOVA App (kova.casa).


In 2 Minuten ausprobieren — ohne eigenen Regler

Der öffentliche myGEKKO-Vorführregler („Mustermann") ist für genau solche Tests da:

claude mcp add mygekko \
  --env GEKKO_USERNAME=mustermann@my-gekko.com \
  --env GEKKO_KEY=HjR9j4BrruA8wZiBeiWXnD \
  --env GEKKO_GEKKOID=K999-7UOZ-8ZYZ-6TH3 \
  -- uvx --from git+https://github.com/joeexafionbot-dev/kova-mcp mygekko-mcp

Dann in Claude Code: „Welche Systeme hat mein Gebäude? Zeig mir die Lichter im Wohnzimmer."

Related MCP server: myUplink MCP Server

Mit deinem eigenen myGEKKO

Voraussetzung: Regler auf my-gekko.com registriert und der Plus-Dienst „myGEKKO Query API" aktiviert (im Home Bundle enthalten; Key erzeugen unter Einstellungen → Globus → Plus Erweitert → Plus Query API → Verwaltung → Neu generieren).

claude mcp add mygekko \
  --env GEKKO_USERNAME=deine@mail.de \
  --env GEKKO_KEY=DEIN-QUERY-API-KEY \
  --env GEKKO_GEKKOID=XXXX-XXXX-XXXX-XXXX \
  -- uvx --from git+https://github.com/joeexafionbot-dev/kova-mcp mygekko-mcp

Claude Desktop (claude_desktop_config.json):

{
  "mcpServers": {
    "mygekko": {
      "command": "uvx",
      "args": ["--from", "git+https://github.com/joeexafionbot-dev/kova-mcp", "mygekko-mcp"],
      "env": {
        "GEKKO_USERNAME": "deine@mail.de",
        "GEKKO_KEY": "DEIN-QUERY-API-KEY",
        "GEKKO_GEKKOID": "XXXX-XXXX-XXXX-XXXX"
      }
    }
  }
}

Auch lokal (LAN statt Cloud) möglich: GEKKO_MODE=local + GEKKO_LOCAL_HOST — alle Variablen in .env.example.

Was der Server kann

Resources

gekko://inventory (alle Systeme/Geräte, datengetrieben entdeckt), gekko://system/{system}, gekko://item/..., gekko://capabilities

Lese-Tools

list_devices, get_state, describe_capabilities

Steuer-Tools

control_device, control_light, … — standardmäßig AUS

Transporte

stdio (Claude Code/Desktop) und streamable-http (gehostet, Token-geschützt)

Sicherheit (bewusst konservativ)

  • Read-only by default. Steuern erfordert explizit GEKKO_ALLOW_WRITE=true.

  • Deny-List bleibt immer zu: Alarmanlage, Türen/Zutritt, Kameras sind auch mit Write-Freigabe gesperrt; kritische Aktionen verlangen eine zweite Bestätigung.

  • Credentials nur über Umgebungsvariablen, nie in Dateien/Logs (Key wird in Logs geschwärzt).

  • Regler-schonend: Rate-Limits und Backoff bei 429/470 — fehlerhafte Anfragen landen sonst im Alarmprotokoll des Reglers.

Details: SECURITY.md.

English quickstart

MCP server for myGEKKO building controllers (official Query API, cloud or LAN). Read-only by default; writes are opt-in (GEKKO_ALLOW_WRITE=true) and policy-gated (alarm/access/cameras always denied). Try it instantly against the public demo controller using the credentials in the first snippet above, or set GEKKO_USERNAME / GEKKO_KEY / GEKKO_GEKKOID for your own controller. Run via uvx --from git+https://github.com/joeexafionbot-dev/kova-mcp mygekko-mcp.

Entwicklung

uv sync && uv run pytest          # Tests
uv run mygekko-mcp --transport stdio
uv run dump-inventory             # read-only Inventar-Dump als JSON

Dieses Repo ist der Release-Mirror des KOVA-Monorepos (dort läuft die CI); Issues und PRs sind hier trotzdem willkommen und werden zurückgespielt.

Lizenz & Marken

MIT. myGEKKO ist eine Marke der myGEKKO | Ekon GmbH — KOVA MCP ist ein unabhängiges Community-Projekt und wird nicht von myGEKKO herausgegeben. Die Demo-Zugangsdaten oben gehören zum öffentlichen Vorführregler von myGEKKO.

Available Tools

3 tools
describe_capabilitiesA

Discover what this specific controller exposes and how to control it.

Because every installation is configured differently, call this to learn which systems exist, which are controllable, and the exact command grammar of each writable device. Systems with a 'typed_tool' are best driven by that tool (e.g. control_light); the rest are driven by 'control_device' using an advertised command token or label.

Args: system: optional system key to describe just one (e.g. 'lights').

NameRequiredDescriptionDefault
systemNo

TDQS

A4.5/5.0
Behavior4/5

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

No annotations are provided, so the description carries the full burden. It implies a read-only discovery action ('Discover what this controller exposes') and discloses that results vary per installation and that some systems are writable vs not. It does not explicitly state side effects, but the tool is clearly a query. It also mentions the 'command grammar' which is behavioral context.

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 clear opening sentence, explanatory paragraphs, and an Args section. It is somewhat verbose but every sentence adds value (purpose, usage context, routing guidance, parameter explanation). Front-loaded with the main purpose and formatted for readability. Not excessively long.

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?

For a discovery tool with an optional single parameter and no output schema, the description covers what the agent needs: what it will learn (systems, controllability, command grammar), how to use that information (routing to typed_tool vs control_device), and the parameter syntax. It does not describe the exact return format, but that is not required given the purpose. It is sufficiently complete for correct invocation.

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 schema describes a single optional parameter 'system' with no description. The tool's description compensates with an 'Args:' section: 'system: optional system key to describe just one (e.g. lights).' This adds meaning beyond the schema, clarifying it is optional, takes a system key, and provides an example. Given the schema coverage is 0%, the description adequately covers the parameter semantics.

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's purpose: 'Discover what this specific controller exposes and how to control it.' It specifies a verb (discover), a resource (this specific controller), and details what is learned: which systems exist, which are controllable, and the command grammar for writable devices. This distinguishes it from siblings like list_devices and get_state.

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?

The description explicitly states when to call the tool: 'Because every installation is configured differently, call this to learn which systems exist, which are controllable...' It also provides routing guidance: 'Systems with a typed_tool are best driven by that tool (e.g. control_light); the rest are driven by control_device using an advertised command token or label.' This is an explicit rule for how to act on the results, fulfilling the usage dimension well.

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

get_stateA

Read the current state of a device by its path (e.g. 'lights/item0').

NameRequiredDescriptionDefault
pathYes

TDQS

A4/5.0
Behavior3/5

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

With no annotations, the description carries the burden and does communicate that this is a read-only operation rather than a mutation, and gives a path example. However, it does not disclose what the returned state looks like, whether the path must be exact, or any error behavior, so transparency is only partial.

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?

A single, front-loaded sentence with no filler. Every word contributes meaning, and the path example is efficiently integrated.

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?

For a one-parameter read tool with no output schema, the description provides the essential action, target, and example path. It is slightly thin on what 'state' contains and on explicit distinctions from siblings, but overall an agent has enough to invoke it correctly.

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 description coverage is 0%, so the description must compensate; it does so by explaining the meaning of path through the example 'lights/item0'. It could be more explicit about path format or conventions, but for a single parameter this is sufficient to guide invocation.

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?

States a specific action (Read) and resource (current state of a device), with a concrete path example. This clearly distinguishes it from sibling tools list_devices and describe_capabilities, which are about enumeration and capabilities rather than current state.

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 this tool is for retrieving a device's current state, but it does not explicitly state when to prefer it over list_devices or describe_capabilities. No when-to-use or when-not-to-use conditions or alternative names are provided, leaving the agent to infer from sibling tool names.

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

list_devicesA

List available myGEKKO devices, optionally filtered to one system.

Args: system: optional system key (e.g. 'lights', 'blinds', 'roomtemps').

NameRequiredDescriptionDefault
systemNo

TDQS

A4/5.0
Behavior3/5

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

No annotations are provided, so the description bears the full burden of disclosing behavior. The verb 'List' implies a read-only operation, but the description does not explicitly state whether the operation is safe, requires authentication, has rate limits, or returns all devices vs. a paginated subset. It does disclose the optional filtering behavior, but for a simple listing tool the absence of any remark on side effects or response structure is acceptable, though not exhaustive. No contradiction exists.

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 extremely concise: one sentence stating the primary purpose and one line describing the optional parameter, followed by examples. It is front-loaded with the main verb and resource, and every sentence earns its place. No filler or redundancy.

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?

This is a simple tool with a single optional parameter and no output schema. The description gives enough to call it correctly: what it does, how to filter, and example values. It does not describe the return format, but for a listing tool an agent can reasonably assume a list of device objects. Siblings like get_state likely handle the per-device details, so the description is adequately complete for its simplicity.

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 provides only the type and default for 'system' with no description (0% schema coverage), so the description must compensate. It does so by explaining that 'system' is an optional key and giving concrete examples ('lights', 'blinds', 'roomtemps'), which adds meaningful context beyond the bare schema. The explanation is clear enough for an agent to infer valid inputs, though it doesn't enumerate all possible system keys.

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 the resource 'available myGEKKO devices', and notes optional filtering by system. This is easily distinguishable from sibling tools like get_state (which retrieves a state) and describe_capabilities (which describes capabilities). The purpose is unambiguous and specific.

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 tells the agent it can optionally filter by a system key, and provides examples of valid keys ('lights', 'blinds', 'roomtemps'), which gives some context on how to use the parameter. However, it does not explicitly mention when to use this tool instead of siblings like get_state or describe_capabilities, nor does it state any exclusions or prerequisites. The guidance is partial but not misleading.

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

Tool Schema Changelog

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

  1. 3 tool updatesv0.0.1
    • First observeddescribe_capabilities
    • First observedget_state
    • First observedlist_devices

TDQS

A3.9/5.0

Scored across 3 tools

Disambiguation4/5

The three tools have clearly distinct responsibilities: listing devices, reading state, and describing controller capabilities. However, the describe_capabilities description references 'control_light' and 'control_device' tools that are not present in the set, which could confuse an agent about which tool to use for control operations.

Naming Consistency5/5

All tool names consistently follow the verb_noun snake_case pattern: list_devices, get_state, describe_capabilities. The naming is perfectly uniform and predictable, with no mixed conventions or unexplained abbreviations.

Tool Count3/5

Three tools is at the low end of what would be appropriate for a smart home server, but since the tools reference dynamic, configuration-driven capabilities, the count is borderline acceptable for a discovery/query-focused surface. However, the absence of any control tools (referenced but not included) makes the surface feel thin for what appears to be a home automation domain.

Completeness2/5

The surface covers discovery and reading well but is significantly incomplete for control tasks. An agent can list devices, read state, and learn how to control systems, but then hits a dead end because control_light and control_device do not actually exist as tools. The capability descriptions promise actions the server cannot perform, creating a clear gap.

Maintenance

ActivityStale
ResponsivenessNo issues

Related MCP Connectors

  • Connect Amazon Seller Central to Claude or ChatGPT via MCP. Orders, inventory, pricing, fees, FBA.

    https://sellermcp.co.uk/mcp
  • Let Claude or ChatGPT search, read and send your WhatsApp messages over MCP. OAuth sign-in.

    https://corapilot.com/mcp
  • Remote streamable-HTTP MCP server running on a single Cloudflare Worker. Your assistant gets live Airbnb, Amazon, Booking.com, Google Flights, Maps and Reddit data, social search on X, Instagram and TikTok, the Meta Ad Library, and image/video generation without any keys. Connect your own accounts to let it send WhatsApp or Telegram messages, work an IMAP inbox, manage Meta Ads campaigns and publish to X and LinkedIn. OAuth 2.1 with PKCE; stored credentials are AES-256-GCM encrypted.

  • tri-train is a training platform for triathletes that syncs activities from Strava and Garmin and exposes them to Claude through a remote MCP server. Ask Claude how your last block went, why your run pace dropped, or whether you are fresh enough for Sunday's race, and it answers from your real data: activities with laps and grade-adjusted pace, weekly load and the performance management chart (CTL/ATL/TSB), sleep, HRV and resting heart rate, and your race calendar with predictions. Claude can also act: create and adjust planned workouts with structured intervals, push them to your Garmin watch, add races and write notes. Every change is journaled and can be undone. Read and write access are separate OAuth scopes, and the server enforces them on every call. Built and hosted in Switzerland by a triathlete; data stays on our own servers (Swiss revDSG / GDPR).

    https://tri-train.com/api/mcp

Related MCP Servers

  • A
    license
    Not graded
    quality
    C
    maintenance
    Connects MCP clients (e.g., Claude) to your NIBE myUplink heat-pump account for reading sensors and controlling settings via OAuth2 authentication.
    2
    MIT
  • A
    license
    A
    quality
    B
    maintenance
    Provides Claude and any MCP client with live access to property management data, enabling operations on properties, units, leases, tenants, work orders, vendors, accounting, and file attachments through natural language.
    25
    MIT