Skip to main content
Glama

KOVA MCP

Talk to your myGEKKO in your words. An open-source MCP server that connects Claude (and any other MCP client) to myGEKKO building controllers — via the official 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 your own words, straight to your house.

KOVA MCP is the tool for tinkerers and power users. If you want it daily, on your phone, and for the whole family — without a terminal: that is what the KOVA App is for (kova.casa).


Try it in 2 minutes — without your own controller

The public myGEKKO demo controller (“Mustermann”) is there for exactly this kind of test:

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

Then in Claude Code: “What systems does my building have? Show me the lights in the living room.”

Related MCP server: Home Assistant MCP Server

With your own myGEKKO

Prerequisite: controller registered on my-gekko.com and the Plus service “myGEKKO Query API” activated (included in the Home Bundle; generate a key under Settings → Globe → Plus Advanced → Plus Query API → Administration → Generate new).

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"
      }
    }
  }
}

Also possible locally (LAN instead of cloud): GEKKO_MODE=local + GEKKO_LOCAL_HOST — all variables in .env.example.

What the server supports capabilities

Resources

gekko://inventory (all systems/devices, data-driven discovery), gekko://system/{system}, gekko://item/..., gekko://capabilities

Read tools

list_devices, get_state, describe_capabilities

Control tools

control_device, control_light, … — off by default

Transports

stdio (Claude Code/Desktop) and streamable-http (hosted, token-protected)

Security (deliberately conservative)

  • Read-only by default. Control requires explicit GEKKO_ALLOW_WRITE=true.

  • Deny-list always remains enforced: alarm system, doors/access, and cameras are blocked even with write access enabled; critical actions require a second confirmation.

  • Credentials only via environment variables, never in files/logs (the key is redacted in logs).

  • Controller-friendly: rate limits and backoff on 429/470 — otherwise faulty requests would fall into the controller's alarm log.

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 (“off”) and policy-gated (alarm/access/camera are always denied). Try it instantly with the public demo controller using the credentials above, or set GEKKO_USERNAME / GEKKO_KEY / GEKKO_GEKKOID in your own controller. Run via uvx --from git+https://github.com/joeexafionbot-dev/kova-mcp mygekko-mcp.

Development

GXP4

The repository is the release mirror of the KOVA monorepo (where CI runs); issues and PRs are still welcome and will be forwarded back.

License & trademarks

MIT. myGEKKO is a trademark of myGEKKO | Ekon GmbH — KOVA MCP is an independent community project and is not released by myGEKKO. The demo credentials above belong to the public myGEKKO demo controller.

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').

ParametersJSON Schema
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').

ParametersJSON Schema
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').

ParametersJSON Schema
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

ActivityMaintained
ResponsivenessNo issues

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