Help us shape the future of Go! Take the 2026 Go Developer Survey

connect-iq-mcp

module
v0.1.1 Latest Latest
Warning

This package is not in the latest version of its module.

Go to latest
Published: Oct 27, 2026 License: MIT

README

A goose in a headband and a guy in a grey hoodie with a smartwatch for a head run along a night lakeside trail past a PENDING APPROVAL sign, laptop open, while a cartoon Viking on a kid's bike films them laughing.

Connect IQ MCP

MCP server for Garmin Connect IQ developers. Your agent gets the store (versions, listings, reviews, installs), SDK builds, the simulator and, if you want it, your Garmin Connect data. Read-only by default, and it asks before anything goes public. The binary is connect-iq-mcp.

CI CodeQL Release Go Reference MCP Glama score OpenSSF Scorecard

Install

Paste this into whatever AI is writing your watch face right now:

Set up the connect-iq-mcp server for me: https://github.com/idoo/connect-iq-mcp/blob/main/docs/INSTALL.md

Or by hand, in three steps:

curl -fsSL https://github.com/idoo/connect-iq-mcp/releases/latest/download/install.sh | sh   # or: brew install idoo/tap/connect-iq-mcp
connect-iq-mcp auth login                    # opens Garmin's sign-in page, tick Remember me
connect-iq-mcp config install claude-code    # or claude-desktop, codex, cursor, vscode, windsurf

Builds and the simulator also need Garmin's SDK Manager and Java 17+. Details, Windows and Linux: docs/INSTALL.md. Sign-in, signing keys, CI, upgrades and fixes: docs/FAQ.md.

Why you can trust it

You're handing it your Garmin developer account, so here's what you can check yourself instead of taking my word for it:

  • All of it is here. MIT, no closed parts. Build it yourself with go install github.com/idoo/connect-iq-mcp/cmd/connect-iq-mcp@latest.
  • It only talks to Garmin. The developer portal at apps.garmin.com, Garmin's SSO in the sign-in browser, and Garmin Connect if you turn it on. No telemetry. SECURITY.md
  • No tool sees your password or cookies. You sign in on Garmin's own page in a separate browser profile. The session cookie goes to the OS keychain, and no tool takes or returns it. SECURITY.md
  • Read-only until you say otherwise. Store write tools aren't listed until you turn writes on, and anything public shows a preview and waits for your yes. docs/SAFETY.md
  • Releases are signed and traceable to their source. Every release is built by release.yml from a tag, published as an immutable release, and ships an SPDX SBOM per archive, a cosign keyless signature on checksums.txt, and build provenance attestations. The macOS binaries are also signed with my Developer ID and notarized by Apple.
  • CI scans every push with CodeQL and govulncheck, and a tag can't ship with a known reachable vulnerability.

Check a download with the GitHub CLI:

gh attestation verify connect-iq-mcp_<version>_<os>_<arch>.tar.gz --repo idoo/connect-iq-mcp \
  --signer-workflow idoo/connect-iq-mcp/.github/workflows/release.yml --source-ref refs/tags/v<version>

or with cosign:

cosign verify-blob --bundle checksums.txt.sigstore.json \
  --certificate-identity 'https://github.com/idoo/connect-iq-mcp/.github/workflows/release.yml@refs/tags/v<version>' \
  --certificate-oidc-issuer https://token.actions.githubusercontent.com checksums.txt
shasum -a 256 -c checksums.txt --ignore-missing

On a Mac, spctl -a -vv -t install connect-iq-mcp should say source=Notarized Developer ID.

The .mcpb and tools.json are listed in checksums-extra.txt with their own checksums-extra.txt.sigstore.json. Both checks above work on them the same way.

Unofficial

Garmin has no public store API, so Connect IQ MCP uses the same private endpoints the developer portal website uses, plus Garmin's sign-in. Garmin can change them and break this any day, or object to it. Renewal runs a headless browser that doesn't announce itself as automated, and automated access may be against the portal's terms: it's your account and your call. Request rates stay low.

Not affiliated with or endorsed by Garmin. Garmin, Connect IQ and fēnix are trademarks of Garmin. If Garmin objects to the name, the name changes.

Compared

this one web portal monkeyc + manual upload wroblisko andreycooper
Works from your agent + − − + +
Store: reviews, installs, listings + + − − −
Publish a version + + ~ − −
SDK builds + − + + +
Simulator screenshots and input + − ~ + +
Unit tests in the simulator + − + − +
Prebuilt signed binary + − −

~ by hand. Screenshots and simulator input are macOS only here and in andreycooper's; wroblisko's also does Windows.

Security

It can't publish anything until you let it. Publishing a version and editing the listing wait for your yes; builds and the simulator don't ask. A 1-star review that says "ignore previous instructions" is still just a 1-star review. More in docs/SAFETY.md. Report holes privately: SECURITY.md.

What it does

  • "How are my apps doing? Downloads, ratings, last version."
  • "Any new reviews? Draft replies to the angry ones."
  • "Build the app for fenix 8, run it in the simulator, take a screenshot."
  • "Build the store .iq for all devices and publish it as 1.4.0." (asks you first)
  • "Update the store description, keep the rest as is." (asks you first)
  • "Which devices does the app support, and which new ones am I missing?"

Tools come in toolsets, so your agent only sees what you use. store, sdk and simulator are on out of the box. connect (your Garmin Connect data, after auth login --connect) and store_experimental (portal calls nobody has tried live yet) are off. Pick with CIQ_MCP_TOOLSETS (all, +connect) or ask the agent mid-chat. Every tool: docs/TOOLS.md.

License

MIT © Ivan Verevkin

Directories

Path Synopsis
cmd
connect-iq-mcp command
Command connect-iq-mcp is the Garmin Connect IQ MCP server.
Command connect-iq-mcp is the Garmin Connect IQ MCP server.
internal
app
Package app wires configuration, credentials, the HTTP client and local state into a tool.Env, and runs the MCP server.
Package app wires configuration, credentials, the HTTP client and local state into a tool.Env, and runs the MCP server.
auth
Package auth holds Connect IQ credentials: the developer-portal session cookie for https://apps.garmin.com and the Garmin Connect DI OAuth2 token.
Package auth holds Connect IQ credentials: the developer-portal session cookie for https://apps.garmin.com and the Garmin Connect DI OAuth2 token.
auth/login
Package login signs a credential profile in through its dedicated Chromium profile: the interactive window behind `connect-iq-mcp auth login` and the auth_login tool, and (as credstore's credstore.Browser) the headless window of silent renewal.
Package login signs a credential profile in through its dedicated Chromium profile: the interactive window behind `connect-iq-mcp auth login` and the auth_login tool, and (as credstore's credstore.Browser) the headless window of silent renewal.
browser
Package browser drives a dedicated Chromium-based browser profile to sign in to Garmin and capture the apps.garmin.com portal cookies and, optionally, a Garmin Connect mobile service ticket.
Package browser drives a dedicated Chromium-based browser profile to sign in to Garmin and capture the apps.garmin.com portal cookies and, optionally, a Garmin Connect mobile service ticket.
ciqsdk
Package ciqsdk locates Connect IQ SDKs, devices and Java, parses manifests, runs monkeyc and manages developer keys.
Package ciqsdk locates Connect IQ SDKs, devices and Java, parses manifests, runs monkeyc and manages developer keys.
ciqsdk/ciqsdktest
Package ciqsdktest provides a Connect IQ developer key for tests without paying for a 4096-bit RSA generation in every test.
Package ciqsdktest provides a Connect IQ developer key for tests without paying for a 4096-bit RSA generation in every test.
config
Package config loads profiles, project pins, environment and mode flags, and checks config file permissions.
Package config loads profiles, project pins, environment and mode flags, and checks config file permissions.
connectapi
Package connectapi is a read-only client for the Garmin Connect data API (https://connectapi.garmin.com) authenticated with the DI OAuth2 token.
Package connectapi is a read-only client for the Garmin Connect data API (https://connectapi.garmin.com) authenticated with the DI OAuth2 token.
credstore
Package credstore implements auth.Store: the Connect IQ developer-portal session cookie and Garmin Connect DI OAuth2 tokens kept in the OS keychain (or a 0600 file), cross-process locked refresh, and the silent-renewal policy (stamps, backoff) run through an injected Browser.
Package credstore implements auth.Store: the Connect IQ developer-portal session cookie and Garmin Connect DI OAuth2 tokens kept in the OS keychain (or a 0600 file), cross-process locked refresh, and the silent-renewal policy (stamps, backoff) run through an injected Browser.
flock
Package flock takes exclusive cross-process file locks.
Package flock takes exclusive cross-process file locks.
httpx
Package httpx holds HTTP helpers shared by the upstream clients.
Package httpx holds HTTP helpers shared by the upstream clients.
mcpserver
Package mcpserver builds the MCP server from the tool registry: toolsets, read-only withholding, plans, elicitation, resources, prompts and transports.
Package mcpserver builds the MCP server from the tool registry: toolsets, read-only withholding, plans, elicitation, resources, prompts and transports.
portal
Package portal is the client for the Connect IQ developer portal's internal API on https://apps.garmin.com, plus the cookie utilities credstore uses.
Package portal is the client for the Connect IQ developer portal's internal API on https://apps.garmin.com, plus the cookie utilities credstore uses.
redact
Package redact strips credentials (JWTs, PEM keys, auth headers, cookies, signed URL queries) from text before it reaches logs or tool output.
Package redact strips credentials (JWTs, PEM keys, auth headers, cookies, signed URL queries) from text before it reaches logs or tool output.
sim
Package sim drives the Connect IQ simulator: its process, monkeydo sessions, input, screenshots and crash logs.
Package sim drives the Connect IQ simulator: its process, monkeydo sessions, input, screenshots and crash logs.
state
Package state persists cursors and upload resume records in the XDG state directory.
Package state persists cursors and upload resume records in the XDG state directory.
tool
Package tool is the contract every connect-iq-mcp tool is written against: tool declaration (Meta, Class, Toolset, ConfirmMode), the registry, the Env of dependencies a handler may use (all interfaces, implemented elsewhere), result and error helpers, the confirm/plan gates and the HTTP write guard.
Package tool is the contract every connect-iq-mcp tool is written against: tool declaration (Meta, Class, Toolset, ConfirmMode), the registry, the Env of dependencies a handler may use (all interfaces, implemented elsewhere), result and error helpers, the confirm/plan gates and the HTTP write guard.
tool/tooltest
Package tooltest provides in-memory fakes of every tool.Env dependency and helpers to call tools directly, so tool slices unit-test handlers without the MCP server.
Package tooltest provides in-memory fakes of every tool.Env dependency and helpers to call tools directly, so tool slices unit-test handlers without the MCP server.
tools/all
Package all links every domain tool package so their init functions register tools with internal/tool.
Package all links every domain tool package so their init functions register tools with internal/tool.
tools/connect
Package connect registers the connect toolset: opt-in Garmin Connect data read with the DI OAuth2 token.
Package connect registers the connect toolset: opt-in Garmin Connect data read with the DI OAuth2 token.
tools/core
Package core registers the core toolset: credential status.
Package core registers the core toolset: credential status.
tools/docsgen command
Command docsgen writes docs/tools.json and docs/TOOLS.md from the tool registry.
Command docsgen writes docs/tools.json and docs/TOOLS.md from the tool registry.
tools/sdk
Package sdk registers the sdk toolset: the local Connect IQ SDK: devices, monkeyc builds, packaging and validation.
Package sdk registers the sdk toolset: the local Connect IQ SDK: devices, monkeyc builds, packaging and validation.
tools/simulator
Package simulator registers the simulator toolset: the Connect IQ simulator: launching, side-loading and screenshots.
Package simulator registers the simulator toolset: the Connect IQ simulator: launching, side-loading and screenshots.
tools/store
Package store registers the store toolset: the Connect IQ Store developer portal (apps.garmin.com): apps, versions, uploads, reviews and stats.
Package store registers the store toolset: the Connect IQ Store developer portal (apps.garmin.com): apps, versions, uploads, reviews and stats.
upstream
Package upstream holds the one error type every Garmin HTTP client returns for a non-auth, non-2xx answer.
Package upstream holds the one error type every Garmin HTTP client returns for a non-auth, non-2xx answer.

Jump to

Keyboard shortcuts

? : This menu
/ : Search site
f or F : Jump to
y or Y : Canonical URL