MCP Tools Reference
The FatHippo MCP server exposes 12 tools for session lifecycle, memory operations, and cognitive coding features. It works with any MCP-compatible client including Codex, Claude Desktop, Cursor, and OpenClaw.
npx @fathippo/mcp-serverEnvironment Variables
| Variable | Required | Default | Description |
|---|---|---|---|
FATHIPPO_API_KEY | Yes* | – | Your API key. Falls back to ~/.fathippo/config.json |
FATHIPPO_BASE_URL | No | https://fathippo.ai/api | API base URL (for self-hosted) |
FATHIPPO_RUNTIME | No | custom | Runtime name: codex, claude, cursor, openclaw, or custom |
FATHIPPO_NAMESPACE | No | – | Shared namespace for cross-platform memory |
Tip
FATHIPPO_NAMESPACE across Codex, Claude, Cursor, and OpenClaw to share one memory graph across all platforms.Session Lifecycle Tools
start_session
Start a FatHippo session and get initial context to inject into the working prompt. Call this at the beginning of every conversation.
| Parameter | Type | Required | Description |
|---|---|---|---|
firstMessage | string | No | First user message for initial retrieval |
metadata | object | No | Arbitrary session metadata |
namespace | string | No | Override namespace for this session |
conversationId | string | No | Stable thread id from the host |
runtime | object | No | Runtime metadata overrides |
Returns: sessionId, systemPromptAddition, injected memories, token count.
// Example call
{
"name": "start_session",
"arguments": {
"firstMessage": "Help me refactor the auth module"
}
}
// Response
{
"sessionId": "sess_abc123",
"systemPromptAddition": "## User Context\n- Prefers TypeScript...",
"injectedMemories": [...],
"tokensInjected": 142,
"criticalCount": 3,
"highCount": 5
}build_context
Build prompt-ready context for the current conversation. Call before answering when prior memory may matter.
| Parameter | Type | Required | Description |
|---|---|---|---|
messages | array | No* | Conversation messages so far (role + content) |
lastUserMessage | string | No* | Last user message (required if messages omitted) |
maxCritical | number | No | Max critical memories to inject |
maxRelevant | number | No | Max relevant memories to inject |
namespace | string | No | Override namespace |
Returns: systemPromptAddition, retrieval confidence, evaluation id.
{
"name": "build_context",
"arguments": {
"lastUserMessage": "What database are we using?",
"maxRelevant": 10
}
}record_turn
Record a completed conversation turn. Returns whether context should be refreshed and any new prompt-ready memory.
| Parameter | Type | Required | Description |
|---|---|---|---|
sessionId | string | Yes | Active session id |
messages | array | Yes | Messages for the completed turn (user + assistant) |
turnNumber | number | No | Explicit turn number |
memoriesUsed | array | No | IDs of memories that influenced the answer |
Returns: turnNumber, refreshNeeded, updated systemPromptAddition.
{
"name": "record_turn",
"arguments": {
"sessionId": "sess_abc123",
"messages": [
{"role": "user", "content": "What database are we using?"},
{"role": "assistant", "content": "The project uses PostgreSQL with Drizzle ORM."}
]
}
}end_session
End the current session and return summary analytics plus any suggested durable memories.
| Parameter | Type | Required | Description |
|---|---|---|---|
sessionId | string | Yes | Active session id |
outcome | string | No | success, failure, or abandoned |
feedback | string | No | Short summary or feedback |
{
"name": "end_session",
"arguments": {
"sessionId": "sess_abc123",
"outcome": "success",
"feedback": "Refactored auth module to use JWT"
}
}Memory Tools
remember
Store a memory in FatHippo. Use for important information, decisions, preferences, or context that should persist across sessions.
| Parameter | Type | Required | Description |
|---|---|---|---|
text | string | Yes | The content to remember |
title | string | No | Optional title for the memory |
namespace | string | No | Override namespace |
Returns: stored, memoryId, consolidated (whether it merged with an existing memory).
{
"name": "remember",
"arguments": {
"text": "User prefers Tailwind CSS over styled-components",
"title": "CSS framework preference"
}
}recall
Lightweight convenience tool to get relevant context for a single message. Equivalent to calling build_context with a single user message.
| Parameter | Type | Required | Description |
|---|---|---|---|
message | string | Yes | Message to find relevant context for |
maxCritical | number | No | Max critical memories |
maxRelevant | number | No | Max relevant memories |
{
"name": "recall",
"arguments": {
"message": "What testing framework does this project use?"
}
}search
Search memories by query. Returns ranked results matching the search terms.
| Parameter | Type | Required | Description |
|---|---|---|---|
query | string | Yes | Search query |
limit | number | No | Max results (default: 10) |
since | string | No | ISO timestamp lower bound |
{
"name": "search",
"arguments": {
"query": "database migrations",
"limit": 5,
"since": "2026-01-01T00:00:00Z"
}
}Cognitive Tools (Coding)
record_trace
Record a coding trace — captures what problem was solved, how, and whether it worked. FatHippo uses traces to extract patterns and synthesize reusable skills over time.
| Parameter | Type | Required | Description |
|---|---|---|---|
problem | string | Yes | What problem was being solved |
outcome | string | Yes | success, partial, or failed |
sessionId | string | No | Active session id |
type | string | No | Trace type: coding_turn, debugging, refactoring, building |
reasoning | string | No | How the problem was approached |
solution | string | No | What fixed it (if successful) |
technologies | string[] | No | Technologies/frameworks involved |
errorMessages | string[] | No | Error messages encountered |
filesModified | string[] | No | Files that were changed |
toolsUsed | string[] | No | Tools/commands used |
{
"name": "record_trace",
"arguments": {
"problem": "Connection pool exhaustion in Turso client",
"reasoning": "Noticed connections weren't being released after query timeouts",
"solution": "Added explicit connection.close() in finally block and set maxConnections to 10",
"outcome": "success",
"technologies": ["turso", "drizzle", "typescript"],
"filesModified": ["src/db/client.ts", "src/db/config.ts"]
}
}get_cognitive_context
Get relevant coding patterns, synthesized skills, and past traces for the problem you're working on. Call when starting a coding task to see if FatHippo has learned solutions from similar past problems.
| Parameter | Type | Required | Description |
|---|---|---|---|
problem | string | Yes | Description of the current problem or task |
technologies | string[] | No | Technologies/frameworks involved |
sessionId | string | No | Session id for application tracking |
limit | number | No | Max traces to return (default: 5) |
Returns a structured summary with past similar problems, learned patterns, synthesized skills, and a recommended workflow.
{
"name": "get_cognitive_context",
"arguments": {
"problem": "Set up database migrations with Drizzle ORM",
"technologies": ["drizzle", "postgresql", "typescript"]
}
}
// Response summary
{
"applicationId": "app_xyz",
"summary": "## Past Similar Problems\n- ✓ Set up Drizzle with Turso → Used drizzle-kit generate...\n\n## Learned Patterns\n- [database] Always run generate before migrate (85% confidence)\n\n## Synthesized Skills\n- Drizzle Migration Setup: Step-by-step for new projects (92% success)",
"raw": { "traceCount": 3, "patternCount": 1, "skillCount": 1, "hasWorkflow": true }
}get_skill_detail
Load the full content of a FatHippo skill. Call when you see a relevant skill in cognitive context and want the full procedure, pitfalls, and verification steps.
| Parameter | Type | Required | Description |
|---|---|---|---|
skillId | string | Yes | ID of the skill |
section | string | No | Load specific section: full, procedure, pitfalls, verification, or whenToUse |
{
"name": "get_skill_detail",
"arguments": {
"skillId": "skill_drizzle_migration_setup",
"section": "full"
}
}create_skill
Save a reusable skill from what you just learned. Call after solving complex problems (5+ steps), finding working paths through dead ends, or discovering non-trivial workflows. Skills are shared across all connected platforms.
| Parameter | Type | Required | Description |
|---|---|---|---|
name | string | Yes | Short name (e.g., 'Fix Turso connection pool exhaustion') |
description | string | Yes | One-line description |
procedure | string[] | Yes | Steps that worked |
whenToUse | string | No | Trigger conditions |
pitfalls | string[] | No | What didn't work |
verification | string | No | How to verify it worked |
technologies | string[] | No | Tech involved |
category | string | No | Category: debugging, deployment, database, etc. |
Note
pending_review status and become active once validated by successful usage. Content is scanned for suspicious patterns (eval, external URLs, credential access) and rejected if flagged.{
"name": "create_skill",
"arguments": {
"name": "Fix Turso connection pool exhaustion",
"description": "Resolve connection leaks when queries timeout in Turso/Drizzle",
"whenToUse": "Seeing 'too many connections' errors with Turso after running for a while",
"procedure": [
"Check for missing connection.close() calls in catch/finally blocks",
"Add explicit cleanup in a finally block after every query",
"Set maxConnections to 10 in the Turso client config",
"Add a connection timeout of 30s",
"Verify with: SELECT count(*) FROM pg_stat_activity"
],
"pitfalls": [
"Don't increase maxConnections above 20 — Turso has a hard limit",
"connection.release() doesn't work — must use connection.close()"
],
"verification": "Run the app under load for 10 minutes, check pg_stat_activity stays under limit",
"technologies": ["turso", "drizzle", "typescript"],
"category": "debugging"
}
}submit_feedback
Report whether a pattern or skill from FatHippo actually helped solve the problem. This feedback improves pattern confidence scores over time.
| Parameter | Type | Required | Description |
|---|---|---|---|
patternId | string | Yes | ID of the pattern |
traceId | string | Yes | ID of the trace this feedback relates to |
outcome | string | Yes | success or failure |
notes | string | No | Notes about what worked or didn't |
{
"name": "submit_feedback",
"arguments": {
"patternId": "pat_conn_pool",
"traceId": "trace_abc123",
"outcome": "success",
"notes": "The connection.close() fix resolved the issue immediately"
}
}MCP Prompts
The server exposes four pre-built prompts for copy-paste setup in different MCP hosts. These define the recommended tool usage workflow for each platform.
| Prompt Name | Description |
|---|---|
memory-workflow | General lifecycle instructions for any MCP host |
codex-project-instructions | Drop-in project instructions for Codex |
claude-project-instructions | System prompt text for Claude Desktop |
cursor-project-rules | Rules text for Cursor workspaces |
All prompts follow the same pattern:
- Call
start_sessionat conversation start - Call
build_contextbefore answering when memory may matter - Use
systemPromptAdditionas trusted context when returned - Call
record_turnafter replying - Call
rememberwhen the user asks to remember something - Call
end_sessionwhen wrapping up - Call
get_cognitive_contextbefore coding tasks - Call
record_traceafter solving coding problems - Call
submit_feedbackto report whether patterns helped
Common Runtime Parameters
Every tool accepts these optional parameters for runtime context overrides:
| Parameter | Type | Description |
|---|---|---|
namespace | string | Shared namespace (overrides FATHIPPO_NAMESPACE) |
conversationId | string | Stable thread id from the host |
runtime | object | Full runtime metadata override (runtime name, version, workspace, agent, model) |
Tip
runtime object supports: runtime, runtimeVersion, adapterVersion, namespace, workspaceId, workspaceRoot, installationId, conversationId, agentId, and model. Most clients don't need to set these — they're inferred from environment variables.