Skip to main content

psr-factory-mcp

An MCP server that exposes 55 PSR/SDDP power-system tools to Claude Code through a single unified server. Includes a skill that gives Claude a complete workflow guide — no tool discovery step required.


Prerequisites

Requirement Notes
Python 3.10+ Must be on your PATH
PSR Factory ≥ 5.0.0b111 Licence must be installed and active on this machine
Claude Code Desktop app or CLI (latest version)

Installation

1 — Install the package

pip install psr-factory-mcp

This installs the psr-factory-mcp command on your PATH.

2 — Register the MCP server

Add the following entry to ~/.claude/settings.json under "mcpServers":

"mcpServers": {
  "psr-factory-mcp": {
    "command": "psr-factory-mcp"
  }
}

Claude Desktop uses %APPDATA%\Claude\claude_desktop_config.json instead of ~/.claude/settings.json. The JSON structure is identical — add the block under "mcpServers".

3 - Skill

You can add the skill direclty on claude.


Email Notifications (optional)

The server can send email notifications (e.g. when a long simulation finishes). This feature is entirely optional — the server works normally without it.

To enable, add your SMTP credentials to the "env" block of the MCP server entry in settings.json:

"mcpServers": {
  "psr-factory-mcp": {
    "command": "psr-factory-mcp",
    "env": {
      "SMTP_USERNAME": "you@gmail.com",
      "SMTP_PASSWORD": "xxxx xxxx xxxx xxxx"
    }
  }
}

The server reads these variables at startup and pre-configures SMTP automatically. You can verify it worked by calling the get_smtp_status tool — it will show your address without requiring a configure_smtp call.

All available variables (only SMTP_USERNAME and SMTP_PASSWORD are required to activate email):

Variable Default Description
SMTP_USERNAME Sender email address
SMTP_PASSWORD App password or SMTP password
SMTP_HOST smtp.gmail.com SMTP server hostname
SMTP_PORT 587 SMTP port
SMTP_USE_TLS true Set to "false" to disable STARTTLS

Gmail — generating an App Password

Gmail requires an App Password (a 16-character one-time code) instead of your regular account password. App Passwords are only available when 2-Step Verification is active.

Step 1 — Enable 2-Step Verification (skip if already on)

  1. Go to myaccount.google.com/security.
  2. Under "How you sign in to Google", click 2-Step Verification and follow the steps.

Step 2 — Generate the App Password

  1. Go to myaccount.google.com/apppasswords.
  2. In the "App name" field type PSR Study Assistant and click Create.
  3. Google shows a 16-character code (format: xxxx xxxx xxxx xxxx).
    Copy it immediately — it will not be shown again.

Step 3 — Add to settings.json

Paste the values into the "env" block shown above. Spaces in the password are optional — Google shows them for readability but they are not part of the credential.

Revoking the App Password

Go to myaccount.google.com/apppasswords, find PSR Study Assistant, and click the trash icon. Then remove the "env" block from settings.json.

Using a different email provider

Override the defaults in "env":

"env": {
  "SMTP_HOST": "smtp.office365.com",
  "SMTP_PORT": "587",
  "SMTP_USERNAME": "you@company.com",
  "SMTP_PASSWORD": "your-password",
  "SMTP_USE_TLS": "true"
}

Troubleshooting

Error Likely cause Fix
SMTPAuthenticationError Wrong password or 2FA not enabled Re-generate the App Password
SMTPConnectError Firewall blocking port 587 Set SMTP_USE_TLS to "false" and SMTP_PORT to "465"
SMTP not configured Variables missing or misspelled Check get_smtp_status — confirm key names in "env"

Without the skill

All MCP tools are directly callable from any Claude Code session — the skill just provides additional workflow context.

Setup calls

Every session requires one setup call before domain tools:

Goal Setup tool
Read / query input data setup_input_study(path)
Edit a case (safe copy) setup_edit_study(original, target)
Edit in-place (needs user approval) setup_edit_study_inplace(path)
Manage output files setup_output_case(path)

Example — query thermal plant capacity

setup_input_study("C:/studies/case")
get_objects_by_type("ThermalPlant")
get_objects_table("ThermalPlant", ["InstalledCapacity", "MarginalCost"])

Example — scale all thermal costs by 10%

setup_edit_study("C:/studies/case", "C:/studies/case_+10pct")
get_objects_table("ThermalPlant", ["MarginalCost"])
scale_dataframe("ThermalPlant Gas1 [3]", "MarginalCost", 10)
# ... repeat for each plant key
save_study("C:/studies/case_+10pct")

Tool Reference

All 55 tools across 10 categories:

Category Tools
Setup setup_input_study, setup_edit_study, setup_edit_study_inplace, setup_output_case, save_study
Run get_case_version, list_available_versions, run_psr_model, get_run_status, read_run_log, kill_run
Discovery discover_objects, discover_object_properties, get_all_objects, get_objects_by_type, get_neighbors
Query get_static_properties, get_dynamic_property, get_objects_table
Filter & Aggregate query_by_property_condition, find_by_reference, count_by_reference, sum_property_by_reference
Input DataFrame input_get_dataframe, input_aggregate_dataframe, input_filter_dataframe_by_index, input_filter_dataframe_by_value
Binary DataFrame input_get_binary_dataframe, input_aggregate_binary_dataframe, input_filter_binary_dataframe_by_index, input_filter_binary_dataframe_by_value
Edit modify_static_element, rename_element, modify_element_code, modify_element_key, get_dataframe_schema, set_dataframe, scale_dataframe, create_element, modify_study_setting
Output Management list_enabled_outputs, list_enabled_outputs_paths, get_output_num, convert_output, change_output_availability
Output DataFrame df_info, df_aggregate, df_select_columns, df_combine_columns, df_filter_by_value, df_filter_between, df_filter_by_index, df_merge, df_concat

For full descriptions and usage examples see TOOLS_GUIDE.md and the skill at skills/sr-factory-mcp-skill/SKILL.md.


Repository Structure

PSR-Plugin/
├── pyproject.toml                      # Package: psr-factory-mcp
├── skills/
│   └── psr-factory-mcp-skill/
│       └── SKILL.md                    # Analyst workflow guide (55 tools)
└── src/psr/mcp/
    ├── common.py                       # Study setup + artifact discovery
    ├── input_discover.py               # Query and filter tools
    ├── edit_case.py                    # Edit tools
    ├── outputs.py                      # Output management + DataFrame tools
    ├── execution.py                    # Run/execution tools
    ├── notification.py                 # Email notification tools
    ├── state.py                        # Shared study state
        └── server.py                   # Unified MCP server — all tools registered here

How the MCP Server Works

All tools are registered at startup and immediately callable — no discovery or activation step is needed.

find_tools(query) is an optional helper that ranks the catalog by relevance to a natural-language query. Use it only when you don't know a tool's name.


Adding a New Tool

1 — Write the function in the appropriate module

# src/psr/mcp/input_discover.py
def my_new_tool(obj_key: str, value: float) -> str:
    """One-line summary."""
    ...

2 — Register it in the MCP catalog

# src/psr/mcp/server.py — CATALOG dict
"my_new_tool": {
    "fn":          _input.my_new_tool,
    "stub":        "Short label (5–10 words)",
    "description": "One-line description shown in find_tools results.",
    "tags":        ["query", "input"],
},

Available tags: setup, input, edit, output, discovery, query, filter, aggregate, dataframe, binary, run.

Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

psr_factory_mcp-0.4.1.tar.gz (61.7 kB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

psr_factory_mcp-0.4.1-py3-none-any.whl (57.9 kB view details)

Uploaded Python 3

File details

Details for the file psr_factory_mcp-0.4.1.tar.gz.

File metadata

  • Download URL: psr_factory_mcp-0.4.1.tar.gz
  • Upload date:
  • Size: 61.7 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/7.0.0 CPython/3.13.15

File hashes

Hashes for psr_factory_mcp-0.4.1.tar.gz
Algorithm Hash digest
SHA256 39621c8bf749471e83c8dd832ed9aa94f2acbc351ad1a1a3c302c6a221f02e40
MD5 ffa9f941a915451c3bfad6877a9325a2
BLAKE2b-256 982e4d975b5f9b52717c19c656b7d52a0566c3811a50ce10bc2226568cd0d2a6

See more details on using hashes here.

File details

Details for the file psr_factory_mcp-0.4.1-py3-none-any.whl.

File metadata

File hashes

Hashes for psr_factory_mcp-0.4.1-py3-none-any.whl
Algorithm Hash digest
SHA256 c3374cb877134cec2f929400044c4c698ae46ddb124ef28ce6609aeff27fe290
MD5 dfd4be625da637cb8108353049518231
BLAKE2b-256 9f383ef8202eaa743e0e8a7c486d918c8798116a0bad683d212a0fc49f37a160

See more details on using hashes here.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page