loading…
Search for a command to run...
loading…
Enables Claude to compile, run, and interact with Pascal/Delphi desktop applications, including GUI automation, IDE observation, and Android device interaction
Enables Claude to compile, run, and interact with Pascal/Delphi desktop applications, including GUI automation, IDE observation, and Android device interaction via ADB.
An MCP (Model Context Protocol) server that lets Claude compile, run, and interact with Pascal/Delphi desktop applications. Supports Free Pascal (fpc), Delphi 32-bit (dcc32), and Delphi 64-bit (dcc64) compilers.
| Tool | Description |
|---|---|
get_compiler_info |
Detect available compilers and show versions |
compile_pascal |
Compile single-file source code |
compile_delphi_project |
Compile proper Delphi project from templates (DPR + PAS + DFM) |
run_pascal |
Compile and execute console programs |
launch_app |
Compile and launch GUI app in background |
check_syntax |
Syntax check only (no linking) |
parse_form |
Parse DFM/FMX/LFM form files |
screenshot_app |
Capture screenshot of a running app window |
list_app_windows |
List visible windows on the desktop |
app_click |
Click on a Windows app window at screenshot pixel coordinates |
app_type |
Type text into a Windows app window |
app_key |
Send key or shortcut (e.g., ctrl+a, enter) to a Windows app |
observe_ide |
Capture IDE screenshot and scan project files |
read_ide_errors |
Read source code around compiler error locations |
list_project_files |
List source files in a Delphi/Lazarus project |
adb_devices |
List connected Android devices with model and version |
adb_device_info |
Get detailed info for a specific Android device |
adb_screenshot |
Capture Android device screen |
adb_tap |
Tap a point on the Android device screen |
adb_swipe |
Swipe on the Android device screen |
adb_type_text |
Type text on the Android device |
adb_key |
Send a key event (home, back, enter, etc.) to Android device |
adb_install |
Install an APK on the Android device |
adb_list_packages |
List installed packages on the Android device |
adb_launch_app |
Launch an app on the Android device |
adb_stop_app |
Force-stop an app on the Android device |
adb_push |
Push a file to the Android device |
adb_pull |
Pull a file from the Android device |
setup_fpc |
Download and install Free Pascal (fallback) |
The preview bridge lets Claude see and interact with running Pascal desktop applications through its web-based preview system. It serves live screenshots of desktop app windows as a web page.
Claude Preview Tools (preview_start, preview_screenshot, preview_click)
| HTTP
v
Preview Bridge Server (Python/Starlette)
/ -> HTML page with live screenshot viewer
/api/screenshot -> PNG of target window
/api/controls -> enumerate child controls with positions
/api/click -> click at coordinates or by control hwnd
/api/type -> send keystrokes to target window
/api/move -> move window to screen position
/api/resize -> resize window
| Win32 PrintWindow API
v
Running Pascal Desktop Application
| Route | Method | Description |
|---|---|---|
/ |
GET | HTML page with auto-refreshing screenshot viewer |
/api/screenshot |
GET | PNG screenshot of target window |
/api/windows |
GET | List visible windows |
/api/target |
POST | Set target window by title |
/api/controls |
GET | Enumerate child controls (buttons, inputs, etc.) |
/api/click |
POST | Click by coordinates or direct control hwnd |
/api/type |
POST | Send text or key combos (e.g., ctrl+a, enter) |
/api/drag |
POST | Drag from one point to another |
/api/move |
POST | Move target window |
/api/resize |
POST | Resize target window |
/api/window-info |
GET | Window position, size, and client area offset |
/api/console |
GET | Console output from launched apps |
/api/launch |
POST | Launch an executable |
The click endpoint supports three modes, from most to least reliable:
{"hwnd": "12345"}) — sends BM_CLICK directly to a control handle. Works regardless of DPI, monitors, or foreground state. Get hwnds from /api/controls.{"x": 200, "y": 142, "client": true}) — uses Win32 ClientToScreen for proper DPI handling.{"x": 312, "y": 261}) — raw coordinates in the screenshot image space.The app_click, app_type, and app_key tools let Claude interact with running Windows desktop applications.
screenshot_app to see the current UIapp_click with those coordinates to clickapp_type to enter text into a focused fieldapp_key to send keyboard shortcuts (enter, ctrl+a, alt+f4, etc.)Clicks use PostMessage with automatic child window targeting, so they reach the correct control. Typing and key events use SendInput for full Unicode and modifier support.
Full Android device interaction via ADB. All tools accept an optional device serial number — auto-selects when only one device is connected.
adb_devices — list connected devices with model, Android version, screen sizeadb_device_info — detailed info for a specific deviceadb_screenshot — capture the device screenadb_tap / adb_swipe — touch interaction at pixel coordinatesadb_type_text — type text (auto-escapes for adb shell)adb_key — send key events with aliases: home, back, enter, menu, power, volume_up, volume_down, tab, delete, space, escape, app_switchadb_install — install APK filesadb_list_packages — list installed packages (with optional filter)adb_launch_app — launch an app by package nameadb_stop_app — force-stop an appadb_push — push files from PC to deviceadb_pull — pull files from device to PCThe compile_delphi_project tool generates proper Delphi project structure automatically. You specify components and events, and it creates the correct DPR, PAS, and DFM files.
Templates automatically handle:
Vcl.Forms, System.SysUtils)Forms, SysUtils)compile_delphi_project(
project_name="HelloWorld",
form_caption="My App",
components='[{"type": "TButton", "name": "btnHello", "caption": "Click Me",
"left": 100, "top": 100, "width": 120, "height": 35,
"event": "btnHelloClick"}]',
events='[{"name": "btnHelloClick", "body": "ShowMessage(\'Hello!\');"}]',
compiler="C:\\Path\\To\\dcc64.exe"
)
This generates:
HelloWorld.dpr — project file with proper uses clauseuMain.pas — unit with form class, component declarations, event handlersuMain.dfm — form definition with component propertiesOnce a release is published to PyPI, no clone is needed:
uvx --from claude-pascal-mcp pascal-mcp
uvx --from git+https://github.com/tina4stack/claude-pascal-mcp pascal-mcp
Pin to a tag for reproducibility: git+https://github.com/tina4stack/[email protected].
git clone https://github.com/tina4stack/claude-pascal-mcp.git
cd claude-pascal-mcp
# Install dependencies
uv sync
# Run the MCP server (stdio mode)
uv run pascal-mcp
# Run the preview bridge (HTTP mode)
uv run pascal-preview
PyPI install:
claude mcp add --transport stdio pascal-dev -- uvx --from claude-pascal-mcp pascal-mcp
Git install:
claude mcp add --transport stdio pascal-dev -- uvx --from git+https://github.com/tina4stack/claude-pascal-mcp pascal-mcp
Local clone:
claude mcp add --transport stdio pascal-dev -- uv run --directory /path/to/claude-pascal-mcp pascal-mcp
Or add to your project's .mcp.json — pick the form that matches how you installed:
{
"mcpServers": {
"pascal-dev": {
"command": "uvx",
"args": ["--from", "claude-pascal-mcp", "pascal-mcp"]
}
}
}
{
"mcpServers": {
"pascal-dev": {
"command": "uvx",
"args": ["--from", "git+https://github.com/tina4stack/claude-pascal-mcp", "pascal-mcp"]
}
}
}
{
"mcpServers": {
"pascal-dev": {
"command": "uv",
"args": ["run", "--directory", "/path/to/claude-pascal-mcp", "pascal-mcp"]
}
}
}
Add to your claude_desktop_config.json (pick the form matching your install):
{
"mcpServers": {
"pascal-dev": {
"command": "uvx",
"args": ["--from", "claude-pascal-mcp", "pascal-mcp"]
}
}
}
{
"mcpServers": {
"pascal-dev": {
"command": "uv",
"args": ["run", "--directory", "C:/path/to/claude-pascal-mcp", "pascal-mcp"]
}
}
}
Maintainer notes — cutting a new release publishes to PyPI automatically.
version in pyproject.toml.git tag v0.1.0 && git push origin v0.1.0..github/workflows/publish.yml) builds the sdist + wheel, publishes to PyPI via Trusted Publishing, and attaches the artifacts to a GitHub Release.One-time PyPI Trusted Publisher setup (required before the first release):
uv publish).tina4stackclaude-pascal-mcppublish.ymlpypipypi (Settings → Environments).No API tokens needed — OIDC handles auth.
Add to .claude/launch.json in your project root:
{
"version": "0.0.1",
"configurations": [
{
"name": "pascal-preview",
"runtimeExecutable": "/path/to/claude-pascal-mcp/.venv/Scripts/pythonw.exe",
"runtimeArgs": ["-m", "pascal_mcp.preview_bridge"],
"port": 18080,
"autoPort": true
}
]
}
Then in Claude Code, use preview_start("pascal-preview") to open the preview panel.
The server automatically detects compilers in this priority order:
You can also specify a full path to any compiler executable:
compile_pascal(source, compiler="C:\\Program Files (x86)\\Embarcadero\\Studio\\37.0\\bin\\dcc64.exe")
Detection checks the system PATH first, then known installation directories:
C:\FPC\*\bin\*\fpc.exeC:\Lazarus\fpc\*\bin\*\fpc.exeC:\Program Files (x86)\Embarcadero\Studio\*\bin\dcc*.exeMIT
Выполни в терминале:
claude mcp add claude-pascal-mcp-server -- npx Безопасность
Низкий рискАвтоматическая эвристика по публичным данным — не гарантия безопасности.