A Blueprint-style visual node editor for creating FastMCP servers. Build MCP tools, resources, and prompts by connecting nodes - no coding required.
- Visual Node Programming - Unreal Engine Blueprint-style interface with execution flow (white) and data (colored) pins
- Full MCP Support - Create Tools, Resources, and Prompts visually
- Turing Complete - Variables, loops (While, For Each), conditionals (Branch), and all the logic you need
- Live Code Preview - See generated Python code update in real-time as you build
- Simulate Tool Calls - Right-click any tool to test it directly in the editor
- Save/Load Projects - Save your node graphs as
.guimcpfiles - Export to Python - Generate clean, runnable FastMCP server code
| Category | Nodes |
|---|---|
| MCP | Server Config, Tool Definition, Resource Definition, Prompt Definition |
| Flow Control | Return, Branch (If/Else), For Each, While Loop, Sequence |
| Variables | Set Variable, Get Variable, Make Literal |
| Math | Add, Subtract, Multiply, Divide, Modulo |
| Comparison | Equal, Not Equal, Greater Than, Less Than, And, Or, Not |
| String | Format, Concatenate, Length, Split, Join, To String |
| List | Make List, Get, Length, Append, Contains |
| Dictionary | Make Dict, Get, Set, Keys, Values, Has Key |
| I/O | HTTP Request, File Read, File Write, JSON Parse, JSON Stringify |
# Clone the repository
git clone https://github.com/yourusername/guiMCP.git
cd guiMCP
# Install dependencies
pip install -r requirements.txt
# Run
python main.py- Python 3.11+
- PySide6
- NodeGraphQt
- FastMCP (for running exported servers)
- Add a Server Config node (sets your MCP server name)
- Add a Tool Definition node (defines your tool's name, description, parameters)
- Build your logic using flow control and data nodes
- Add a Return node and connect it to the tool's execution output
- Connect data to the Return node's value input
- Export via File → Export Python (Ctrl+E)
- Run your exported server:
python mcp_server.py
Creating a simple tool that fetches a cat fact:
Tool Definition ("get_cat_fact")
↓ exec
HTTP Request (url: "https://catfact.ninja/fact")
↓ exec ↓ response
Return ←─────────────┘
Generates:
from fastmcp import FastMCP
import urllib.request
import urllib.error
mcp = FastMCP("MyServer")
@mcp.tool
def get_cat_fact() -> str:
"""Fetches a random cat fact"""
_http_url = 'https://catfact.ninja/fact'
# ... HTTP code ...
return http_response
if __name__ == "__main__":
mcp.run()| Shortcut | Action |
|---|---|
| Ctrl+N | New Project |
| Ctrl+O | Open Project |
| Ctrl+S | Save Project |
| Ctrl+Shift+S | Save Project As |
| Ctrl+E | Export Python |
| Ctrl+Z | Undo |
| Ctrl+Y | Redo |
| Delete | Delete Selected Nodes |
guiMCP/
├── main.py # Entry point
├── guimcp/
│ ├── core/ # Port types, validation
│ ├── nodes/ # All node definitions
│ │ ├── base/ # ExecutableNode, PureNode, EventNode
│ │ ├── mcp/ # Server, Tool, Resource, Prompt
│ │ ├── flow_control/ # Branch, ForEach, While, Return
│ │ ├── data/ # Math, String, List, Dict operations
│ │ ├── variables/ # Get/Set Variable, Literals
│ │ └── io/ # HTTP, File, JSON operations
│ ├── codegen/ # Code generation
│ └── ui/ # Main window, dialogs, widgets
└── tests/ # Test suite
- Execution Pins (white) define the order operations run - connect left to right
- Data Pins (colored) pass values between nodes - colors indicate types
- Event Nodes (Tool/Resource/Prompt Definition) are entry points with only exec_out
- Executable Nodes have exec_in and exec_out, generate statements
- Pure Nodes have no exec pins, generate expressions (evaluated lazily)
MIT