Skip to main content
Glama

KOVA MCP

Habla con tu myGEKKO. Un servidor MCP de código abierto que conecta a Claude (y a cualquier otro cliente MCP) con los controladores de edificios myGEKKO — a través de la API oficial de consulta myGEKKO. Talk to your myGEKKO building controller from Claude — English quickstart below.

«¿Qué temperatura hace en el salón?» · «¿Qué luces están todavía encendidas?» · «Baja las persianas del sur.» — con tus palabras, directamente a tu casa.

KOVA MCP es la herramienta para aficionados y usuarios avanzados. Si quieres usarlo a diario, en el móvil y para toda la familia — sin terminal: esa es la app KOVA (kova.casa).


Probar en 2 minutos — sin tu propio controlador

El controlador de demostración público de myGEKKO („Mustermann") está precisamente para estas pruebas:

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

Luego en Claude Code: «¿Qué sistemas tiene mi edificio? Muéstrame las luces del salón.»

Related MCP server: myUplink MCP Server

Con tu propio myGEKKO

Requisito: controlador registrado en my-gekko.com y el servicio Plus «myGEKKO Query API» activado (incluido en el paquete Home; generar clave en Ajustes → Globo → Plus Avanzado → Plus Query API → Administración → Generar de nuevo).

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

También es posible local (LAN en lugar de nube): GEKKO_MODE=local + GEKKO_LOCAL_HOST — todas las variables en .env.example.

Qué puede hacer el servidor

Recursos

gekko://inventory (todos los sistemas/dispositivos, descubiertos por datos), gekko://system/{system}, gekko://item/..., gekko://capabilities

Herramientas de lectura

list_devices, get_state, describe_capabilities

Herramientas de control

control_device, control_light, … — desactivadas por defecto

Transportes

stdio (Claude Code/Desktop) y streamable-http (alojado, protegido por token)

Seguridad (deliberadamente conservadora)

  • Solo lectura por defecto. El control requiere explícitamente GEKKO_ALLOW_WRITE=true.

  • La lista de denegación siempre permanece cerrada: alarma, puertas/acceso, cámaras están bloqueadas incluso con permiso de escritura; las acciones críticas requieren una segunda confirmación.

  • Credenciales solo mediante variables de entorno, nunca en archivos/logs (la clave se enmascara en los logs).

  • Respetuoso con el controlador: límites de velocidad y backoff en 429/470 — las solicitudes erróneas acabarían en el registro de alarmas del controlador.

Detalles: 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.

Desarrollo

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

Este repositorio es el espejo de lanzamiento del monorepo de KOVA (allí se ejecuta la CI); los issues y PRs son bienvenidos aquí y se reenvían.

Licencia y marcas

MIT. myGEKKO es una marca de myGEKKO | Ekon GmbH — KOVA MCP es un proyecto comunitario independiente y no está publicado por myGEKKO. Los datos de acceso de demostración anteriores pertenecen al controlador de demostración público de 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').

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

ActivitySlowing
ResponsivenessNo issues

Related MCP Connectors

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