{
  "markdown": "# ElOverblik\n\nA Claude Code plugin that lets Claude read your Danish electricity metering\ndata from [ElOverblik](https://eloverblik.dk) (Energinet's customer data\nplatform).\n\nAsk Claude things like:\n\n- *\"List my electricity meters.\"*\n- *\"How much electricity did I use last week, by hour?\"*\n- *\"What tariffs am I paying on metering point 571313100000000001?\"*\n- *\"Show me the meter readings for March 2025.\"*\n\n## Tools\n\n| Tool | What it does |\n|---|---|\n| `list_metering_points` | List your metering points (meters). |\n| `get_metering_point_details` | Get address, type, status, grid operator. |\n| `get_charges` | Tariffs, subscriptions, and fees on a metering point. |\n| `get_time_series` | Consumption time series (Hour/Day/Month/Year). Response is flattened to `{meteringPointId, unit, resolution, points: [{start, end, quantity, quality}]}` by default. Pass `raw: true` for the original CIM envelope. |\n| `get_meter_readings` | Raw meter register readings (cumulative kWh). |\n\nAll date inputs are ISO-8601 (`YYYY-MM-DD`). The `to` date is **exclusive** —\nto fetch a single day, set `to` to the next day.\n\n## Install\n\n### Prerequisites\n\n- [Claude Code](https://claude.com/code) installed\n- Node.js ≥ 20 on your `PATH`\n- An ElOverblik account (private or business)\n\n### Step 1 — Generate a refresh token\n\n1. Sign in at [eloverblik.dk](https://eloverblik.dk).\n2. Go to **Profil → Datadeling**.\n3. Click **Opret token** (Create token) under \"Datadelings token\".\n4. Copy the long JWT string. You'll paste it into Claude Code in the next step.\n\nThe token is valid for ~1 year. Treat it like a password.\n\n### Step 2 — Install the plugin\n\n```sh\n/plugin marketplace add maziarzamani/eloverblik-mcp\n/plugin install eloverblik@maziarzamani-plugins\n```\n\nWhen prompted, paste your refresh token. Claude Code stores it in your OS\nkeychain.\n\nThat's it — restart your Claude Code session and ask Claude about your\nelectricity data.\n\n## How auth works\n\nElOverblik uses a long-lived **refresh token** (no OAuth). The plugin:\n\n1. Stores your refresh token securely in your system keychain via Claude\n   Code's `userConfig.sensitive` mechanism. The token never leaves your\n   machine.\n2. On each session, exchanges the refresh token at\n   `GET /api/Token` for a short-lived (24 h) access token, cached in memory.\n3. Calls the ElOverblik API with the access token.\n\nIf your refresh token expires or you regenerate it, run\n`/plugin config eloverblik` to update the value.\n\n## Privacy\n\n- Your refresh token stays on your machine (OS keychain).\n- API calls go directly from your machine to `api.eloverblik.dk`.\n- No analytics, no third-party servers.\n\n## Development\n\nThis repo doubles as the plugin and a one-plugin marketplace.\n\n```sh\nbun install         # install dev deps\nbun test            # run all tests\nbun test --watch    # TDD loop\nbun run typecheck   # tsc --noEmit\nbun run build       # produce server.js (committed artifact)\n```\n\nLocal plugin testing:\n\n```sh\nELOVERBLIK_REFRESH_TOKEN=<your-token> claude --plugin-dir .\n```\n\n### Layout\n\n```\n.claude-plugin/\n  plugin.json          # Plugin manifest (name, userConfig, etc.)\n  marketplace.json     # One-plugin marketplace catalog\n.mcp.json              # Wires Claude Code to launch server.js\nserver.js              # Bundled MCP server (committed artifact)\nsrc/\n  index.ts             # Stdio entrypoint\n  server.ts            # McpServer wiring\n  client/eloverblik.ts # API client (auth, retry, error mapping)\n  tools/               # One file per MCP tool\n```\n\n## License\n\nMIT — see [LICENSE](./LICENSE).\n\n## Acknowledgements\n\nThis is an unofficial third-party plugin. ElOverblik is a service of\n[Energinet](https://energinet.dk). Not affiliated with or endorsed by\nEnerginet or Anthropic.\n",
  "bytes": 3735,
  "sha": "c44a60b89bc6d1c8982158c35cfb4ab6d1c88270e1ab4fb2f418acf61053d735",
  "repo_slug": "maziarzamani/eloverblik-mcp",
  "fonte": "repo",
  "truncated": false,
  "api": "https://agentalog.com/api/listings/plg_maziarzamani_eloverblik_mcp_eloverblik_266ba341/readme"
}