Eltern-Portal MCP Server
An MCP server that provides access to German school Eltern-Portal data. Enables AI assistants to fetch substitution plans, parent letters, bulletin board announcements, and school calendar events.
Tools
| Tool | Description |
|---|---|
check_login |
Verify that credentials are valid |
get_vertretungsplan |
Fetch the current substitution plan (uses Claude Haiku for HTML parsing) |
list_elternbriefe |
List all parent letters with metadata |
get_elternbrief |
Fetch a specific parent letter by number or title (PDF converted to markdown) |
get_schwarzes_brett |
Fetch bulletin board announcements |
get_termine |
Fetch upcoming school events and calendar entries (Schulaufgabenplan) |
Prerequisites
- Python 3.10+
- An Eltern-Portal parent account
- An Anthropic API key (for vertretungsplan HTML parsing)
Installation
cd plugins/elternportal
pip install -r elternportal_mcp/requirements.txt
Configuration
The server loads credentials in this priority order:
1. Config file (recommended)
Create ~/.mcp-server-config/elternportal_mcp/.env:
URL=https://yourschool.eltern-portal.org
USER=your@email.com
PASSWORD=your-password
ANTHROPIC_API_KEY=sk-ant-...
This is the simplest setup. The server reads this file on startup and uses the values as defaults. No other configuration needed.
2. Environment variables (override)
Environment variables take precedence over the config file. Both long and short names are supported:
| Long name (MCP config) | Short name (.env file) | Description |
|---|---|---|
ELTERNPORTAL_URL |
URL |
School-specific Eltern-Portal URL |
ELTERNPORTAL_USER |
USER |
Parent account email |
ELTERNPORTAL_PASSWORD |
PASSWORD |
Parent account password |
ANTHROPIC_API_KEY |
ANTHROPIC_API_KEY |
For Claude Haiku HTML parsing |
3. Plugin .mcp.json (auto-configured via marketplace)
When installed as a Cowork plugin, the .mcp.json is auto-discovered. It uses ${VAR} syntax to pull from the environment. Set the env vars via ~/.claude/settings.json:
{
"env": {
"ELTERNPORTAL_URL": "https://yourschool.eltern-portal.org",
"ELTERNPORTAL_USER": "your@email.com",
"ELTERNPORTAL_PASSWORD": "your-password",
"ANTHROPIC_API_KEY": "sk-ant-..."
}
}
Manual MCP client config
For non-plugin setups, add to your .mcp.json:
{
"elternportal": {
"command": "python",
"args": ["-m", "elternportal_mcp"],
"cwd": "/path/to/plugins/elternportal",
"env": {
"ELTERNPORTAL_URL": "https://yourschool.eltern-portal.org",
"ELTERNPORTAL_USER": "your@email.com",
"ELTERNPORTAL_PASSWORD": "your-password",
"ANTHROPIC_API_KEY": "sk-ant-..."
}
}
}
License
MIT
Metadata
Release files for elternportal-mcp 2.1.0
For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.
Source distribution (sdist)
| File | Size | Uploaded | |
|---|---|---|---|
| elternportal_mcp-2.1.0.tar.gz | 9.6 kB | Details |
Built distribution (wheel)
| File | Interpreter | ABI | Platform | Reset |
|---|---|---|---|---|
| elternportal_mcp-2.1.0-py3-none-any.whl | Python 3 | none | any | Details |
Total release size: 22.1 kB
Release files / elternportal_mcp-2.1.0.tar.gz
| Download URL | elternportal_mcp-2.1.0.tar.gz |
|---|---|
| Size | 9.6 kB |
| Tags | Source |
|
SHA-256 checksum How to use checksums |
9b3f7dae0ea5b0db7da846064b2ac709408390db62172f11c00bd78bef8d7128
|
|
BLAKE2b-256 checksum How to use checksums |
3df05f03b38b85c969b1036dd2346c488aba40be7da92f11eb617e6ef8bff206
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
Yes |
| Uploaded via |
twine/6.1.0 CPython/3.13.7
|
Provenance
Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.
PyPI Publish Attestation
PyPI verified that this artifact, at this checksum, originated from the publisher listed below.
Signed by GitHub Actions, verified by PyPI on Apr 6, 2026.
Transparency logRelease files / elternportal_mcp-2.1.0-py3-none-any.whl
| Download URL | elternportal_mcp-2.1.0-py3-none-any.whl |
|---|---|
| Size | 12.5 kB |
| Tags | Python 3 |
|
SHA-256 checksum How to use checksums |
37ac3c4096c645226677029a6a462f398e09d6ceb8c7bb8b659f0cce9c89f921
|
|
BLAKE2b-256 checksum How to use checksums |
c13ae52cc2b845f0ac71327db1e575cf916015cd795b4ae3180ca7d5487e9e5e
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
Yes |
| Uploaded via |
twine/6.1.0 CPython/3.13.7
|
Provenance
Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.
PyPI Publish Attestation
PyPI verified that this artifact, at this checksum, originated from the publisher listed below.
Signed by GitHub Actions, verified by PyPI on Apr 6, 2026.
Transparency log