KOVA MCP
KOVA MCP
myGEKKO와 대화하세요. Claude(및 다른 모든 MCP 클라이언트)를 공식 myGEKKO Query API를 통해 myGEKKO 건물 컨트롤러에 연결하는 오픈소스 MCP 서버입니다. Talk to your myGEKKO building controller from Claude — English quickstart below.
"거실 온도는 몇 도야?" · "아직 켜져 있는 조명은 뭐야?" · "남쪽 셔터를 내려줘." — 당신의 말로, 집에 직접 전달됩니다.
KOVA MCP는 매니아와 파워 유저를 위한 도구입니다. 터미널 없이 매일, 휴대폰에서, 온 가족이 사용하려면: 그것이 바로 KOVA 앱(kova.casa)입니다.
2분 만에 체험하기 — 자체 컨트롤러 없이
공개 myGEKKO 데모 컨트롤러("Mustermann")는 바로 이러한 테스트를 위해 제공됩니다:
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그런 다음 Claude Code에서: "내 건물에는 어떤 시스템이 있나요? 거실 조명을 보여줘."
Related MCP server: myUplink MCP Server
자체 myGEKKO로 사용하기
전제 조건: 컨트롤러가 my-gekko.com에 등록되어 있고 Plus 서비스 **"myGEKKO Query API"**가 활성화되어 있어야 합니다(Home Bundle에 포함됨; 설정 → 글로브 → Plus 고급 → Plus Query API → 관리 → 새로 생성에서 키 생성).
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-mcpClaude 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"
}
}
}
}로컬(클라우드 대신 LAN)도 가능합니다: GEKKO_MODE=local + GEKKO_LOCAL_HOST — 모든 변수는 .env.example에 있습니다.
서버가 할 수 있는 것
리소스 |
|
읽기 도구 |
|
제어 도구 |
|
전송 방식 |
|
보안(의도적으로 보수적)
기본적으로 읽기 전용. 제어하려면 명시적으로
GEKKO_ALLOW_WRITE=true가 필요합니다.거부 목록은 항상 잠겨 있음: 알람 시스템, 문/출입, 카메라는 쓰기 권한이 있어도 차단됩니다; 중요한 작업은 두 번째 확인이 필요합니다.
자격 증명은 환경 변수로만 전달, 파일/로그에는 절대 저장되지 않음(키는 로그에서 마스킹됨).
컨트롤러 보호:
429/470에서 속도 제한 및 백오프 — 그렇지 않으면 잘못된 요청이 컨트롤러의 알람 로그에 기록됩니다.
자세한 내용: 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.
개발
uv sync && uv run pytest # Tests
uv run mygekko-mcp --transport stdio
uv run dump-inventory # read-only Inventar-Dump als JSON이 저장소는 KOVA 모노레포의 릴리스 미러입니다(CI는 거기서 실행됨); 여기서도 이슈와 PR은 환영하며 원래 저장소로 반영됩니다.
라이선스 및 상표
MIT. myGEKKO는 myGEKKO | Ekon GmbH의 상표입니다 — KOVA MCP는 독립적인 커뮤니티 프로젝트이며 myGEKKO에서 배포하지 않습니다. 위의 데모 자격 증명은 myGEKKO의 공개 데모 컨트롤러에 속합니다.
Available Tools
3 toolsdescribe_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').
| Name | Required | Description | Default |
|---|---|---|---|
| system | No |
TDQS
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.
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.
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.
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.
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.
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').
| Name | Required | Description | Default |
|---|---|---|---|
| path | Yes |
TDQS
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.
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.
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.
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.
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.
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').
| Name | Required | Description | Default |
|---|---|---|---|
| system | No |
TDQS
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.
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.
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.
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.
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.
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.
3 tool updates
v0.0.1- First observed
describe_capabilities - First observed
get_state - First observed
list_devices
TDQS
Scored across 3 tools
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.
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.
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.
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
Related MCP Connectors
Connect Amazon Seller Central to Claude or ChatGPT via MCP. Orders, inventory, pricing, fees, FBA.
Let Claude or ChatGPT search, read and send your WhatsApp messages over MCP. OAuth sign-in.
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).
Related MCP Servers
- AlicenseNot gradedqualityDmaintenanceEnables Claude AI to control and manage Homey Pro smart home devices, flows, and analytics through natural language.12MIT
- AlicenseNot gradedqualityCmaintenanceConnects MCP clients (e.g., Claude) to your NIBE myUplink heat-pump account for reading sensors and controlling settings via OAuth2 authentication.2MIT
- AlicenseNot gradedqualityCmaintenanceEnables Claude to read weclapp data such as customers, invoices, and articles via a secure MCP server.ISC
- AlicenseAqualityBmaintenanceProvides 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.25MIT