Skip to main content
Glama
OnePowerUser88

pyRevit Foundry MCP

pyRevit Foundry MCP

MCP server for developing and maintaining pyRevit extensions. Static analysis only, no Revit runtime required.

License: GPL-3.0 (same as pyRevit). See LICENSE. Contributing: CONTRIBUTING.md.

What it does

  • Scan extension layout – Inventory bundles, scripts, bundle.yaml

  • Generate bundle.yaml – Infer title/tooltip from __title__/docstring for missing bundles

  • Import audit – Unused imports, raw RevitAPI usage, pyRevit wrapper suggestions (with core clone)

  • Duplicate detection – Function-level duplicate code across scripts

  • Lib structure – Propose lib/ module tree from duplicates (report-only)

  • Patch engine – Unified diffs, dry-run by default

Related MCP server: mcp-pyright

Quickstart

Install

pip install -e .
# or: uv pip install -e .

Run MCP server (stdio)

pyrevit-foundry
# or: python -m foundry_mcp.server

Cursor MCP config

Add to .cursor/mcp.json:

{
  "mcpServers": {
    "pyrevit-foundry": {
      "command": "pyrevit-foundry",
      "args": [],
      "cwd": "D:/path/to/your/pyrevit-extension-repo"
    }
  }
}

Or use uv:

{
  "mcpServers": {
    "pyrevit-foundry": {
      "command": "uv",
      "args": ["run", "pyrevit-foundry"],
      "cwd": "D:/path/to/your/pyrevit-extension-repo"
    }
  }
}

Repo layout

  • foundry_core/ – indexers, analyzers, extension creator (no MCP deps)

  • foundry_mcp/ – MCP server and tools

  • tests/ – pytest

  • .pyrevit-foundry.toml is gitignored; copy from .pyrevit-foundry.toml.example for local core path.

pyRevit core clone (optional)

For wrapper/import suggestions, point to a local pyRevit core clone:

Option 1: .pyrevit-foundry.toml in repo root (copy from .pyrevit-foundry.toml.example):

pyrevit_core_path = "D:/path/to/pyrevit-clone"

Option 2: Pass core_root to import_audit_with_core tool.

Tools

Tool

Description

run_health_check

One-shot overview – scan, bundle.yaml, extensions.json, import audit, duplicates, IronPython

scan_extension_layout

Full inventory (summary_only, limit_bundles, limit_py_files)

list_missing_bundle_yaml

Bundles without bundle.yaml (optional for pushbuttons; recommended)

generate_bundle_yaml

Create bundle.yaml for bundles that lack it (dry_run | write)

validate_extensions_json

Validate extensions.json schema

suggest_extensions_json_dependencies

Suggest deps from imports

import_audit_with_core

Unused imports, raw API, wrapper suggestions

analyze_duplicates

Duplicate clusters (limit, summary_only)

ironpython_audit

f-strings, type hints, walrus, match (IronPython 2.7 incompat)

propose_lib_structure

Lib module proposals

extract_to_lib

Extract duplicates to lib/ and patch scripts (dry_run | write)

apply_patch

Apply patches (dry_run | write)

create_extension_config_tool

Create config template for extension (run first, user fills, then create_extension)

get_extension_config_template_tool

Return config template content (no file)

create_extension

Create extension from config_path or inline params

add_button

Add a single pushbutton to an existing extension

Resources vs tools

Use resources when the client supports MCP resources and you need:

  • foundry://repo/tree – Full inventory JSON (for context loading)

  • foundry://repo/py_files – List of scripts

  • foundry://repo/file/{path} – Read a file by relative path

  • foundry://repo/healthQuick health summary (bundles, missing yaml, ext_json issues)

  • foundry://core/version_info – pyRevit core git sha

  • foundry://core/index – Core module/symbol index

Use tools when you need to:

  • Run analyses (health check, import audit, duplicates, IronPython)

  • Generate or apply changes (bundle.yaml, extract_to_lib, patches)

  • Validate or suggest (extensions.json)

Tip: Start with run_health_check or foundry://repo/health for a quick overview, then drill down with specific tools.

Safety

  • Default: dry-run – No file writes unless mode="write"

  • Patches are minimal and reversible

  • No f-strings in generated patches (IronPython 2.7 compat)

  • No network calls

Tests

pytest tests/
F
license - not found
-
quality - not tested
D
maintenance

Maintenance

Maintainers
Response time
Release cycle
Releases (12mo)
Commit activity

Resources

Unclaimed servers have limited discoverability.

Looking for Admin?

If you are the server author, to access and configure the admin panel.

Latest Blog Posts

MCP directory API

We provide all the information about MCP servers via our MCP API.

curl -X GET 'https://glama.ai/api/mcp/v1/servers/OnePowerUser88/pyRevitFoundryMCP'

If you have feedback or need assistance with the MCP directory API, please join our Discord server