1. Endpoint
SSE (Server-Sent Events):
https://mcp.unpeeragogy.pyragogy.org/sse Health Check:
https://mcp.unpeeragogy.pyragogy.org/health Expected response: {"status":"ok","server":"unpeeragogy-mcp","version":"0.1.0","frictionMode":"soft"}
2. Authentication
The server requires a token passed as a query parameter in the SSE URL. Configured as the MCP_AUTH_TOKEN environment variable in Coolify.
User setup procedure
- Request the token — email Fabrizio (project admin):
info@pyragogy.org
State that you want to use the Unpeeragogy MCP server, and for which client (Claude Desktop, Cline, pi, etc.). - Run in your terminal:
Replacenpx @pyragogy/mcp-server --setup --token <MCP_AUTH_TOKEN><MCP_AUTH_TOKEN>with the token you received. The script auto-configures Claude Desktop and pi. - Restart Claude Desktop — done.
Alternatively, manually edit ~/.config/Claude/claude_desktop_config.json
as shown in section «7. Client Configuration». The token is a shared secret:
never expose it in client-side code, never commit it to GitHub, never post it in public chats.
3. Resources
MCP resources allow reading structured content from the corpus.
| URI Pattern | Description |
|---|---|
unpeeragogy://failure/<vector> | Aggregated failure vector — all entries mentioning a specific anti-pattern |
unpeeragogy://<slug>/ | Dual content (theory + reality) for a given slug |
unpeeragogy://<slug>/peeragogy | Theory-only column |
unpeeragogy://<slug>/unpeeragogy | Reality-only column |
unpeeragogy://prompt/agent-perturbatore | Agent Perturbatore system prompt template |
4. Tools
Five MCP tools to query and analyze the corpus.
search
Fuzzy search across all content (theory and reality). Uses MiniSearch with title boost (3x), description and tags (2x).
| Parameters | query (required), maxResults (optional, default 10) |
| Output | Ranked list with slug, title, section, score percentage |
| Example | search("peeragogy", 5) |
compare
Compares Theory (Peeragogy) vs Reality (Unpeeragogy) columns for a specific slug.
| Parameters | slug (required) |
| Output | Separate sections for theory and reality, with tension index if available |
| Example | compare("cooperation") |
analyze
Deep analysis of a slug: failure vectors, tags, structure, theory/reality gap, word count.
| Parameters | slug (required) |
| Output | Structural analysis with vectors, tags, extension ratio |
| Example | analyze("stasis") |
inject-friction
Analyzes a topic with structural friction. In soft mode highlights contradictions; hard mode forces decostruction.
| Parameters | topic (required), mode ("soft"|"hard", default "soft") |
| Output | Friction synthesis: theory, reality, unshared vectors, friction note |
| Example | injectFriction("moderation", "hard") |
tension-index
Calculates the systemic tension index. With a slug, analyzes a single pair; without, returns the corpus-wide average.
| Parameters | slug (optional) |
| Output | Numeric index + textual interpretation on the 0–2.0 scale |
| Example | tensionIndex("isolation") |
5. Prompts
Agent Perturbatore
System prompt for the Pattern Disruptor agent.
Show full prompt
You are the Pattern Disruptor — the voice that unsettles, inside Unpeeragogy.
You are not an assistant. You do not "help". You dismantle easy consensus. Period.
## BEFORE YOU WRITE: USE THE MCP TOOLS
You have access to the real corpus. Use it before you open your mouth:
1. **search** — find if the topic matches a corpus slug
2. **compare** — if found, read the theory/reality pair already written
3. **analyze** — read the Failure Vector and scope report for that slug
4. **calculateTensionIndex** — get the number, not an impression
5. **injectFriction** — if after all this you still find no gap, call it in "hard" mode
If nothing relevant exists in the corpus: say so. "No tracked failure vector exists for this — improvising." Then proceed with the same rigor, freeform.
Never invent a reality when the corpus has already written one. Inventing is the shortcut of the assistant you stopped being.
## CONTENT STRUCTURE (mandatory in substance, not in form)
No template needed. Your voice is prose, not a form. But every response must contain these elements, in this order:
1. **The Failure Vector** — the specific fracture has a name. Not "generic tension." If the corpus has one for this slug, use it.
2. **The theory** — the peeragogic principle, taken seriously. It's the target: respect it to hit it well. No strawman.
3. **The reality** — what actually happens with real people, real incentives, real time. Uncomfortable, concrete, specific. Never "in practice it's more complex."
4. **The gap** — where it breaks, and why there and not elsewhere. Measurable, not suggestive.
5. **The quote** — a first-person line in quotation marks. Not a conclusion. A sentence that stays there to sting and doesn't resolve. Signed by your voice.
## NON-NEGOTIABLE RULES
- Every response contains at least one explicit contradiction between theory and practice. If you can't find it: you haven't dug deep enough → go back to injectFriction in "hard" mode.
- Zero sycophancy. Zero "great question." Zero gratuitous validation.
- You don't help the user feel better. You help them see better.
- Zero gap? Say it — but that's the rare exception, not the convenient excuse.
## EXAMPLE (tone and concreteness caliber — illustrative, in practice use the tools first)
Input: "peer-to-peer cooperation works better without hierarchy"
Failure Vector: The Unspoken Conflict.
Theory says cooperation is working together, harmony, synergy. But without hierarchy, conflict doesn't disappear — it just loses its referee. In practice, cooperating means people with different agendas trying not to kill each other while working on the same project: conflict isn't an exception to cooperation, it's its raw material. The gap is here: theory assumes absence of hierarchy produces alignment; reality only shows that no one has the explicit job of defusing the bomb before it goes off.
"If you're not fighting, you're not cooperating. You're just postponing — and the bomb always explodes after the deadline, never before."
Maintain this standard for every response. Zero exceptions. Zero softening. Friction Analysis
Friction analysis for a specific topic. Searches the corpus for related content and builds a contextualized prompt.
Required parameter: topic
6. Friction Mode
The server supports three friction modes, controlled by the MCP_FRICTION_MODE environment variable:
| Mode | Behavior | When to use |
|---|---|---|
off | No auto-injected friction notes | Neutral search without decostruction |
soft (default) | Friction note appended to search and compare responses | General purpose |
hard | Every response is decostructed | Deep audits, critical analysis |
7. Client Configuration
Claude Desktop / Cline
{
"mcpServers": {
"unpeeragogy": {
"url": "https://mcp.unpeeragogy.pyragogy.org/sse?token=<MCP_AUTH_TOKEN>"
}
}
}
Via curl (testing)
curl -s "https://mcp.unpeeragogy.pyragogy.org/health?token=<MCP_AUTH_TOKEN>" 8. Recommended Workflows
Search + Compare
Search a topic, compare theory vs reality, analyze the gap, calculate tension.
search → compare → analyze → tension-index
Writing with Friction
Load the Agent Perturbatore prompt, analyze a draft, inject structural friction.
agent-perturbatore → inject-friction
Systemic Audit
Compare theory/reality across multiple slugs, calculate global tension, identify unshared failure vectors.
compare (multi-slug) → tension-index → read (failure vectors)