APsystems MCP Server

by mjrgr

Not rated
GitHub

About

A Model Context Protocol (MCP) server written in Go that wraps the APsystems OpenAPI, giving AI assistants like Claude direct access to your solar monitoring data. Includes an optional web dashboard for visual monitoring.

Details

Author
mjrgr
Categories
Other, AI

Setup

Install APsystems MCP Server in your MCP client (Claude Desktop, Cursor, Windsurf, and others).

Repository: https://github.com/mjrgr/apsystems-mcp-server

Follow the installation instructions in the repository README, then restart your MCP client.

A production-readyModel Context Protocol(MCP) server written in Go that wraps the APsystems OpenAPI, giving AI assistants like Claude direct access to your solar monitoring data. Includes an optional web dashboard for visual monitoring.

- APsystems MCP Server ☀️🛰️

- Table of Contents
-
Features
-
Quick Start

- 🚀 Prerequisites
-
Install & Run
-
With SSE Transport
-
With Dashboard

- System Tools
-
ECU Tools
-
Inverter Tools
-
Meter Tools
-
Storage Tools

- 1. Start the MCP Server
-
2. Configure Claude CLI
-
3. Example Usage

- 16 MCP toolscovering all APsystems API endpoints: system details, energy summaries, ECU/inverter/meter/storage data
- HMAC-SHA256 signature authentication— implements the APsystems signature protocol
- Built-in web dashboard— dark-themed single-page app with Chart.js energy visualizations
- Rate limiting— configurable request throttling to respect API limits
- Automatic retries— exponential back-off on transient errors and rate-limit responses
- Dual transport— stdio (default) or SSE over HTTP, selectable via environment variable
- Structured logging— JSON logs viaslogwith configurable levels
- Podman support— multi-stage Containerfile for minimal production images
- CI/CD— GitHub Actions for testing, linting, and cross-platform releases

Before you get started, make sure you have:

- 🦫Go(latest version recommended)
- 🔑APsystems OpenAPI credentials(APP_ID&APP_SECRET)
- 🆔System ID (SID)Find it in the APsystems EMA app underSettings → Account Details
- ✉️Email APsystems supportand include:

- Who you are
- Why you need API access
- What you plan to do with the data

git clone https://github.com/mjrgr/apsystems-mcp-server.git cd mcp-server # Install dependencies go mod tidy # Set credentials export APS_SYS_ID="your_fake_sid_1234567890" export APS_APP_ID="your_fake_app_id_32charslong1234567890abcd" export APS_APP_SECRET="your_fake_secret12" # Build and run go run ./cmd/server

By default the server usesstdio(standard input/output) for MCP communication. SetAPS_MCP_TRANSPORT=sseto start an HTTP server with Server-Sent Events instead:

export APS_MCP_TRANSPORT=sse export APS_MCP_SSE_ADDR=:8888 # optional, defaults to :8888 go run ./cmd/server # SSE endpoint: http://localhost:8888/sse # Message endpoint: http://localhost:8888/message

This is useful when you want to connect remote MCP clients over HTTP rather than running the server as a child process.

export APS_DASHBOARD=true export APS_DASH_ADDR=:8080 go run ./cmd/server # Dashboard available at http://localhost:8080
podman build -t apsystems-mcp -f Containerfile . podman run --rm \ -e APS_SYS_ID="your_fake_sid_1234567890" \ -e APS_APP_ID="your_fake_app_id_32charslong1234567890abcd" \ -e APS_APP_SECRET="your_fake_secret12" \ -e APS_DASHBOARD=true \ -p 8080:8080 \ apsystems-mcp

To run with SSE transport instead of stdio:

podman run --rm \ -e APS_SYS_ID="your_fake_sid_1234567890" \ -e APS_APP_ID="your_fake_app_id_32charslong1234567890abcd" \ -e APS_APP_SECRET="your_fake_secret12" \ -e APS_MCP_TRANSPORT=sse \ -e APS_MCP_SSE_ADDR=:8888 \ -e APS_DASHBOARD=true \ -p 8888:8888 -p 8080:8080 \ apsystems-mcp # SSE endpoint: http://localhost:8888/sse

- Never commit real API credentials or secretsto version control. Use.env.localor environment variables for local development.
- Rotate your APP_SECRET and SIDif you suspect they are compromised.
- Report vulnerabilitiesby opening a security issue or emailing the maintainers.
- For production, use a secrets manager or environment injection (not plaintext files).

You can also connect this MCP server to the Claude CLI for direct, scriptable access to your solar data from the terminal.

Make sure your MCP server is running and accessible (locally or remotely):

go run ./cmd/server # or with Podman/Docker as shown above

Add your MCP server to Claude CLI using the built-in command:

claude mcp add apsystems -s local -- podman run -i --rm -p 8888:8080 -e APS_DASHBOARD=true -e APS_SYS_ID=your_fake_sid_1234567890 -e APS_APP_ID=your_fake_app_id_32charslong1234567890abcd -e APS_APP_SECRET=your_fake_secret12 docker.io/mehdijrgr/apsystems-mcp-server 2>&1
claude mcp add apsystems -s local -- docker run -i --rm -p 8888:8080 -e APS_DASHBOARD=true -e APS_SYS_ID=your_fake_sid_1234567890 -e APS_APP_ID=your_fake_app_id_32charslong1234567890abcd -e APS_APP_SECRET=your_fake_secret12 docker.io/mehdijrgr/apsystems-mcp-server 2>&1

Replace the environment variables with your actual credentials.

This will automatically update your Claude CLI configuration to include theapsystemsMCP server.

Ask Claude CLI to query your solar data via the MCP server:

claude ask "Show me my solar production for today"
claude ask "List all my inverters"
claude ask "what's the average monthly solar production?"

You can script and automate queries, integrate with other tools, or use Claude CLI in your workflows!

To use Claude Desktop with Docker or Podman, update yourclaude_desktop_config.jsonas follows:

{ "inputs": [ { "type": "promptString", "id": "aps_sys_id", "description": "APsystems System ID" }, { "type": "promptString", "id": "aps_app_id", "description": "APsystems App ID" }, { "type": "promptString", "id": "aps_app_secret", "description": "APsystems App Secret", "password": true } ], "mcpServers": { "apsystems": { "command": "podman", "args": [ "run", "-i", "--rm", "-p", "8888:8080", "-e", "APS_DASHBOARD=true", "-e", "APS_SYS_ID=${input:aps_sys_id}", "-e", "APS_APP_ID=${input:aps_app_id}", "-e", "APS_APP_SECRET=${input:aps_app_secret}", "docker.io/mehdijrgr/apsystems-mcp-server" ] } } }
{ "inputs": [ { "type": "promptString", "id": "aps_sys_id", "description": "APsystems System ID" }, { "type": "promptString", "id": "aps_app_id", "description": "APsystems App ID" }, { "type": "promptString", "id": "aps_app_secret", "description": "APsystems App Secret", "password": true } ], "mcpServers": { "apsystems": { "command": "docker", "args": [ "run", "-i", "--rm", "-p", "8888:8080", "-e", "APS_DASHBOARD=true", "-e", "APS_SYS_ID=${input:aps_sys_id}", "-e", "APS_APP_ID=${input:aps_app_id}", "-e", "APS_APP_SECRET=${input:aps_app_secret}", "docker.io/mehdijrgr/apsystems-mcp-server" ] } } }

For SSE transport (remote/network mode), use theurlfield instead ofcommand:

{ "mcpServers": { "apsystems": { "url": "http://localhost:8888/sse" } } }

You can also mount a config file or credentials as needed:

{ "mcpServers": { "apsystems": { "command": "podman run -i --rm --env-file /path/to/env.local mehdijrgr/apsystems-mcp-server 2>&1", "env": {} } } }

- "Show me my solar production for today"
- "How much energy did my system produce this month?"
- "What's the status of my inverters?"
- "Compare my daily production this week"

├── cmd/server/ # CLI entry point ├── internal/ │ ├── api/ # HTTP client with auth, retries, rate limiting │ ├── auth/ # HMAC-SHA256 signature implementation │ ├── dashboard/ # Optional web UI (embedded HTML) │ ├── mcp/ # MCP tool definitions and handlers │ └── models/ # Go structs for API responses ├── .devcontainer/ # VS Code dev container config ├── .github/workflows/ # CI/CD pipelines ├── .vscode/ # Editor settings and launch configs ├── Containerfile # Multi-stage Podman/OCI build ├── Makefile # Build, test, lint targets └── go.mod

The APsystems API uses HMAC signature authentication. Every request includes five custom headers:
- X-CA-AppId— your application identifier
- X-CA-Timestamp— Unix timestamp in milliseconds
- X-CA-Nonce— unique 32-character hex string (UUID without dashes)
- X-CA-Signature-MethodHmacSHA256
- X-CA-SignatureBase64(HMAC-SHA256(stringToSign, appSecret))

timestamp/nonce/appId/requestPath/HTTPMethod/HmacSHA256

whererequestPathis the last segment of the URL path.

# Run tests make test # Lint make lint # Build for all platforms make build

ℹ️Note:If you encounter API errors, check that your credentials (APP_ID, APP_SECRET, SID) are correct and that your account has API access enabled. If you see rate limit errors, try again later or adjust your request frequency.

- Q: I get 'Not authorized' or 'Invalid application account' errors.

- A: Double-check your APP_ID, APP_SECRET, and SID. Make sure your account is approved for API access by APsystems.

- A: Ensure the server is running and the address/port matches your CLI config. Check firewall or container port mappings.

- A: Make sure APS_DASHBOARD is set to true and the server is running. Visit the correct port in your browser.

- GitHub Issues— for bug reports and feature requests
-
Discussions— for Q&A, ideas, and community help
- Email:
support@apsystems.com(for API credential requests)

Contributions are welcome! To get started:
- Fork the repository
- Create a new branch for your feature or fix
- Make your changes and add tests if needed
- Open a pull request with a clear description

Please seeCONTRIBUTING.mdif available, or open an issue to discuss major changes first.

- 📚 Documentation
-
API Reference
-
Open Issues
-
Discussions
-
Releases
-
License

An MCP server for AI video generation. MCP server for AI video generation. Lets Claude, ChatGPT, OpenClaw , Hermes & other agents create AI videos and publish them to YouTube, TikTok, Instagram etc..

HumanDesign.ai MCP is the official account-connected Human Design server for Claude, ChatGPT, Codex, Cursor, and VS Code.

MCP server for interacting with the APVISO AI-powered penetration testing platform from Claude Code, Cursor, Windsurf, Codex, and other MCP-compatible tools.

AI-powered text-to-speech MCP server with instant voice cloning. Generate speech from Claude Desktop, Claude Code, or n8n using 5 built-in voices (English, German, French, Spanish) or clone any voice from a short audio sample. Runs fully local, no API keys, no cloud. Supports stdio, SSE, and HTTP transports.

Chess.com player, game, and daily-puzzle tools where each tool ships its own interactive React view — board replays and a playable puzzle widget, not just text. Built with Skybridge for ChatGPT & Claude.

Pre-indexed code knowledge graph, auto syncs on code changes, for Claude Code, Codex, Gemini, Cursor, OpenCode, AntiGravity, Kiro, and Hermes Agent — fewer tokens, fewer tool calls, 100% local

Live crypto technical analysis MCP server — EMA, RSI, MACD, ATR, Bollinger Bands, TSS scoring, and Claude AI bull/bear debate via CoinGecko free API

A high-performance trading system for Claude Desktop, providing real-time market data via Tiingo and optional Telegram alerts.

Ask Power BI in plain English, from Claude — charts + full ETL context.

Server that connects Claude/Cursor to the FatSecret Platform API. Search foods, track your diet, manage recipes, and monitor weight directly from your AI assistant.

No reviews yet — be the first

Sign in to leave a review

Use Google, GitHub, or an email account so ratings stay tied to real people.

Email sign in

No reviews posted yet.