Asi mcp-tripartite
MCP tripartite integration for orchestrating distributed tool protocols
install
source · Clone the upstream repo
git clone https://github.com/plurigrid/asi
Claude Code · Install into ~/.claude/skills/
T=$(mktemp -d) && git clone --depth=1 https://github.com/plurigrid/asi "$T" && mkdir -p ~/.claude/skills && cp -r "$T/skills/mcp-tripartite" ~/.claude/skills/plurigrid-asi-mcp-tripartite-841010 && rm -rf "$T"
manifest:
skills/mcp-tripartite/SKILL.mdsource content
SKILL: MCP Tripartite Integration
Version: 1.0.0 Trit: 0 (ERGODIC) Domain: mcp, integration, orchestration
Overview
Each MCP server is integrated with a 3-partite structure that ensures GF(3) conservation:
MCP_server ⊗ Skill_MINUS ⊗ Skill_PLUS = 0 (mod 3)
This creates balanced triads where each MCP has a validator (-1) and generator (+1) complement.
MCP Tripartite Assignments
1. GAY.jl MCP (Trit: 0)
three-match (-1) ⊗ gay (0) ⊗ cider-clojure (+1) = 0 ✓
| Role | Component | Action |
|---|---|---|
| MINUS | | Validate GF(3) conservation |
| ERGODIC | | Generate deterministic colors |
| PLUS | | Interactive REPL exploration |
Integration Pattern:
# Generate color via gay-mcp color = mcp_call(:gay, :generate_color, seed: 0x42D) # Validate with three-match valid = mcp_call(:gay, :verify_gf3, colors: [c1, c2, c3]) # Explore in cider-clojure (mcp/gay :generate-palette {:seed 1069 :count 12})
2. Firecrawl MCP (Trit: +1)
tree-sitter (-1) ⊗ babashka (0) ⊗ firecrawl (+1) = 0 ✓
| Role | Component | Action |
|---|---|---|
| MINUS | | Parse/validate scraped content structure |
| ERGODIC | | Transform scraped data |
| PLUS | | Scrape web content |
Integration Pattern:
;; Scrape with firecrawl (def content (mcp/firecrawl :scrape {:url "https://example.com"})) ;; Parse with tree-sitter (def ast (mcp/tree-sitter :get_ast {:content content :language "html"})) ;; Transform with babashka (bb/transform ast {:extract [:title :links :code-blocks]})
3. Exa MCP (Trit: +1)
radare2 (-1) ⊗ huggingface (0) ⊗ exa (+1) = 0 ✓
| Role | Component | Action |
|---|---|---|
| MINUS | | Deep binary/code analysis |
| ERGODIC | | Model/paper discovery |
| PLUS | | AI-powered search |
Integration Pattern:
# Search with exa results = mcp_call("exa", "web_search_exa", query="LLVM optimization passes") # Find related papers on huggingface papers = mcp_call("huggingface", "paper_search", query="compiler optimization") # Analyze binaries with radare2 (for found libraries) analysis = mcp_call("radare2", "analyze", level=2)
4. HuggingFace MCP (Trit: 0)
proofgeneral-narya (-1) ⊗ huggingface (0) ⊗ rubato-composer (+1) = 0 ✓
| Role | Component | Action |
|---|---|---|
| MINUS | | Verify model properties formally |
| ERGODIC | | Navigate model/dataset space |
| PLUS | | Compose musical gestures from model outputs |
Integration Pattern:
# Search for audio models models = mcp_call(:huggingface, :model_search, task: "audio-generation") # Verify model claims with narya verify(:model_output_bounded, model: first(models)) # Compose with rubato rubato_gesture(:from_model_output, model_result)
5. Tree-Sitter MCP (Trit: -1)
tree-sitter (-1) ⊗ unworld (0) ⊗ gay-mcp (+1) = 0 ✓
| Role | Component | Action |
|---|---|---|
| MINUS | | Parse and validate AST |
| ERGODIC | | Derive seed chains from code |
| PLUS | | Color code elements |
Integration Pattern:
# Parse code with tree-sitter ast = mcp_call(:tree_sitter, :get_ast, file: "lib/synergistic_triads.rb") # Derive seeds via unworld seeds = unworld_chain(ast.node_count, genesis: 0x42D) # Color AST nodes with gay-mcp colored_ast = seeds.zip(ast.nodes).map { |seed, node| [node, mcp_call(:gay, :generate_color, seed: seed)] }
6. Radare2 MCP (Trit: -1)
radare2 (-1) ⊗ glass-bead-game (0) ⊗ marginalia (+1) = 0 ✓
| Role | Component | Action |
|---|---|---|
| MINUS | | Reverse engineer binaries |
| ERGODIC | | Navigate concept space |
| PLUS | | Search indie documentation |
Integration Pattern:
# Disassemble function with radare2 asm = mcp_call(:radare2, :disassemble_function, address: "main") # Find related concepts via glass-bead beads = glass_bead_connect(:assembly, :documentation) # Search indie web for obscure docs docs = mcp_call(:marginalia, :search, query: "x86 calling convention")
7. Babashka MCP (Trit: 0)
clj-kondo-3color (-1) ⊗ babashka (0) ⊗ geiser-chicken (+1) = 0 ✓
| Role | Component | Action |
|---|---|---|
| MINUS | | Lint Clojure code |
| ERGODIC | | Execute Clojure scripts |
| PLUS | | Interactive Scheme REPL |
Integration Pattern:
;; Lint with clj-kondo (def warnings (mcp/clj-kondo :lint {:file "script.bb"})) ;; Execute with babashka (mcp/babashka :run_script {:script "script.bb"}) ;; Explore in geiser-chicken (Scheme bridge) (geiser-eval '(load "interop.scm"))
8. Marginalia MCP (Trit: +1)
hatchery-papers (-1) ⊗ epistemic-arbitrage (0) ⊗ marginalia (+1) = 0 ✓
| Role | Component | Action |
|---|---|---|
| MINUS | | Validate against academic papers |
| ERGODIC | | Propagate knowledge across domains |
| PLUS | | Search indie web |
Integration Pattern:
# Search indie web results = mcp_call(:marginalia, :search, query: "category theory software") # Cross-reference with academic papers papers = hatchery_match(results, topic: "applied category theory") # Propagate via epistemic arbitrage propagate_knowledge(from: papers, to: results, gain: :information)
9. Unison MCP (Trit: 0)
slime-lisp (-1) ⊗ unison (0) ⊗ xenodium-elisp (+1) = 0 ✓
| Role | Component | Action |
|---|---|---|
| MINUS | | Interactive Lisp debugging |
| ERGODIC | | Content-addressed code transport |
| PLUS | | Emacs integration |
Integration Pattern:
;; Find code in unison (mcp-unison-find "List.map") ;; Debug in slime (slime-eval-async '(describe 'map)) ;; Integrate via xenodium (dwim-shell-command "ucm transcript")
Complete Triad Matrix
| MCP | Trit | MINUS Partner | PLUS Partner | GF(3) |
|---|---|---|---|---|
| gay | 0 | three-match | cider-clojure | 0 ✓ |
| firecrawl | +1 | tree-sitter | (self) | needs -1 ⊗ 0 |
| exa | +1 | radare2 | (self) | needs -1 ⊗ 0 |
| huggingface | 0 | proofgeneral-narya | rubato-composer | 0 ✓ |
| tree-sitter | -1 | (self) | gay-mcp | needs 0 |
| radare2 | -1 | (self) | marginalia | needs 0 |
| babashka | 0 | clj-kondo-3color | geiser-chicken | 0 ✓ |
| marginalia | +1 | hatchery-papers | (self) | needs -1 ⊗ 0 |
| unison | 0 | slime-lisp | xenodium-elisp | 0 ✓ |
Commands
# List all MCP triads just mcp-triads # Check GF(3) conservation across all MCPs just mcp-gf3-check # Run specific MCP triad just mcp-triad gay # gay ⊗ three-match ⊗ cider-clojure just mcp-triad firecrawl # firecrawl ⊗ tree-sitter ⊗ babashka just mcp-triad huggingface # Test MCP connectivity just mcp-ping gay just mcp-ping firecrawl just mcp-ping all
Configuration
Codex (~/.codex/config.toml)
[mcp_servers.gay] command = "julia" args = ["--project=@gay", "-e", "using Gay; Gay.serve_mcp()"] [mcp_servers.firecrawl] url = "https://mcp.firecrawl.dev/..." [mcp_servers.huggingface] command = "node" args = ["hf-mcp-server/dist/server/stdio.js"]
Crush (.crush.json)
{ "mcp": { "gay": { "type": "stdio", "command": "julia", "args": [...] }, "exa": { "type": "http", "url": "https://mcp.exa.ai/..." }, "babashka": { "type": "stdio", "command": "npx", "args": [...] } } }
Skill Name: mcp-tripartite Type: MCP Integration / Orchestration Trit: 0 (ERGODIC) - coordinates across triads GF(3): Conserved by design