hungryrobot1/MCP-PIF
Built by Metorial, the integration platform for agentic AI.
hungryrobot1/MCP-PIF
Server Summary
Structured tool implementation
Progressive interaction patterns
Meaningful human-AI interaction
A Model Context Protocol (MCP) server written in ClojureScript that explores homoiconicity, introspection, and metaprogramming to enable runtime tool creation and safe self-modification capabilities. It allows models like Claude to create and execute new tools during runtime without restarting the server. For example, tools for arithmetic can perform actual calculations, not LLM approximations based on pattern matching.
It leverages Clojure's code-as-data philosophy known as homoiconicity, is designed to block dangerous operations, and all modifications are journaled and auditable.
Clone and build:
git clone
cd MCP-PIF
npm install
npx shadow-cljs compile mcp-server
Configure Claude Desktop:
Edit your Claude Desktop config file:
~/Library/Application Support/Claude/claude_desktop_config.json
%APPDATA%\Claude\claude_desktop_config.json
{
"mcpServers": {
"mcp-pif-cljs": {
"command": "node",
"args": ["/full/path/to/MCP-PIF/out/mcp-server.js"]
}
}
}
Restart Claude Desktop
For easier use and distribution, you can create a .dxt package:
./package-dxt.sh
This creates mcp-pif-cljs.dxt
which can be installed via drag-and-drop in Claude Desktop.
memory-store
- Store key-value pairs in memorymemory-retrieve
- Retrieve stored valuesjournal-recent
- View recent activity journalserver-info
- Get comprehensive server information (all tools, state, statistics)meta-evolve
- Create new tools at runtimeexecute-tool
- Execute any tool by name (including dynamic ones)You: "Store my favorite programming language as ClojureScript"
Claude: I'll store that for you using the memory-store tool.
You: "What's my favorite programming language?"
Claude: Your favorite programming language is ClojureScript.
You: "I need a tool that calculates the area of a circle"
Claude: I'll create that tool for you using meta-evolve...
[Creates tool with code: (args) => Math.PI * args.radius * args.radius]
You: "What's the area of a circle with radius 5?"
Claude: The area is 78.54 square units.
Due to MCP client caching, newly created tools must be called via execute-tool
:
Create a tool:
Use meta-evolve to create "multiply":
- code: "(args) => args.x * args.y"
- tool-type: "arithmetic"
Verify creation:
Use server-info
(You'll see "multiply [RUNTIME]" in the tools list)
Execute the tool:
Use execute-tool with:
- tool-name: "multiply"
- arguments: { x: 6, y: 7 }
Result: 42
βββββββββββββββββββ ββββββββββββββββββββ βββββββββββββββββββ
β AI Client ββββββΆβ MCP Protocol ββββββΆβ Meta Engine β
β (Claude) β β (stdio/jsonrpc) β β (Self-Modifier) β
βββββββββββββββββββ ββββββββββββββββββββ βββββββββββββββββββ
β β
βΌ βΌ
ββββββββββββββββββββ βββββββββββββββββββ
β Tools/Memory β β Journal DB β
β (Extensible) β β (DataScript) β
ββββββββββββββββββββ βββββββββββββββββββ
src/mcp/
βββ core.cljs # Main server & request routing
βββ protocol.cljs # JSON-RPC/MCP protocol handling
βββ tools.cljs # Tool definitions and handlers
βββ meta.cljs # Self-modification engine
βββ evaluator.cljs # Safe JavaScript evaluation
βββ journal.cljs # Activity logging (DataScript)
# Development build with hot reload
npx shadow-cljs watch mcp-server
# Run tests
npm test
# Create .dxt package
./package-dxt.sh
# Basic protocol test
node test-clean-protocol.js
# Dynamic tools test
node test-dynamic-tools.js
This project explores the intersection of:
Completed:
In progress:
execute-tool
to call runtime-created toolsThis is an experimental project exploring metaprogramming in the context of AI tools. Contributions that enhance self-modification capabilities or improve safety are welcome!
MIT
"The significant problems we face cannot be solved at the same level of thinking we were at when we created them." - Einstein
This project asks: What if our tools could evolve their own thinking?