tilde is a privacy-first Model Context Protocol (MCP) server that acts as the universal memory and profile layer for AI Agents. Configure once. Use everywhere. Your data, your control. Supports profile management, skills, resume import, and team sync. Every time you switch AI tools, you face the same issues: - ๐ Repetition: "I'm a Senior SWE", "I prefer Python", "Don't use ORMs" - ๐งฉ Fragmentatio
Add this skill
npx mdskills install topskychen/tildeComprehensive MCP server providing persistent user profiles and knowledge management with multi-backend storage
1# ๐ tilde23> *Your AI agents' home directory*45**tilde** is a privacy-first [Model Context Protocol](https://registry.modelcontextprotocol.io) (MCP) server that acts as the universal memory and profile layer for AI Agents.67Configure once. Use everywhere. Your data, your control.89Supports profile management, skills, resume import, and team sync.10---1112## The Problem1314Every time you switch AI tools, you face the same issues:1516- **๐ Repetition**: "I'm a Senior SWE", "I prefer Python", "Don't use ORMs"17- **๐งฉ Fragmentation**: Preferences learned in Cursor aren't available in Claude18- **๐ Privacy Concerns**: Unsure who has access to your personal context1920## The Solution2122**tilde** acts as a "digital passport" that your AI agents can read:2324```25โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ26โ Claude Desktop โ Cursor โ Windsurf โ Your Agent โ27โโโโโโโโโโฌโโโโโโโโโโดโโโโโโฌโโโโโโโดโโโโโโฌโโโโโโโดโโโโโโโโฌโโโโโโโโ28 โ โ โ โ29 โโโโโโโโโโโโโโโโโดโโโโโโฌโโโโโโโดโโโโโโโโโโโโโโโ30 โ31 โโโโโโโโโโโโผโโโโโโโโโโโ32 โ tilde MCP Server โ33 โ (runs locally) โ34 โโโโโโโโโโโโฌโโโโโโโโโโโ35 โ36 โโโโโโโโโโโโผโโโโโโโโโโโ37 โ ~/.tilde/profile โ38 โ (your data) โ39 โโโโโโโโโโโโโโโโโโโโโโโ40```4142---4344## Features4546- **๐ Local-First**: Your data stays on your machine by default47- **๐ Structured Profiles**: Identity, tech stack, knowledge, skills48- **๐ MCP Standard**: Works with any MCP-compliant agent49- **โ๏ธ Human-in-the-Loop**: Agents can *propose* updates, you *approve* them50- **๐ง Extensible Schema**: Add custom fields without modifying code51- **๐ Skills Privacy**: Control which skills are visible to agents (public/private/team)52- **๐ค Agent-Callable Skills**: Define skills that AI agents can invoke on your behalf53- **๐ Resume Import**: Bootstrap your profile from existing resume/CV54- **๐ Knowledge Sources**: Books, docs, courses, articles - unified learning model55- **๐ฅ Team Sync**: Share coding standards across your team5657---5859## Quick Start6061### Installation6263```bash64# Install from PyPI65pip install tilde-ai6667# Initialize your profile68tilde init69```7071<details>72<summary>Development Installation</summary>7374```bash75# Clone the repository76git clone https://github.com/topskychen/tilde.git77cd tilde7879# Install with uv80uv sync8182# Run locally83uv run tilde init84```85</details>8687### Configure Cursor8889Add to `.cursor/mcp.json` in your project (or `~/.cursor/mcp.json` for global access):9091```json92{93 "mcpServers": {94 "tilde": {95 "command": "npx",96 "args": ["-y", "tilde-ai"]97 }98 }99}100```101102Once configured, you'll see tilde in your MCP servers with all available tools and resources:103104105106### Configure Antigravity107108Add to `.gemini/antigravity/settings.json` in your project:109110```json111{112 "mcpServers": {113 "tilde": {114 "command": "npx",115 "args": ["-y", "tilde-ai"]116 }117 }118}119```120121### Configure Claude Desktop122123Add to `~/Library/Application Support/Claude/claude_desktop_config.json`:124125```json126{127 "mcpServers": {128 "tilde": {129 "command": "npx",130 "args": ["-y", "tilde-ai"]131 }132 }133}134```135136### Example Usage137138Once configured, your AI agent can access your profile. Try asking:139140> **"What is my name?"**141142The agent will use the `get_profile` tool to fetch your identity and respond with your name and role:143144145146### Create Your Profile147148Edit `~/.tilde/profile.yaml`:149150```yaml151schema_version: "1.0.0"152153user_profile:154 identity:155 name: "John Doe"156 role: "Full Stack Developer"157 years_experience: 10158 # Add any custom fields you need:159 timezone: "America/Los_Angeles"160 pronouns: "they/them"161162 tech_stack:163 languages:164 - TypeScript165 - Python166 - Go167 frameworks:168 - React169 - FastAPI170 - Next.js171 preferences:172 - "Prefer composition over inheritance"173 - "Write tests before implementation (TDD)"174 - "Use descriptive variable names over comments"175 environment: "VS Code, Docker, Linux/MacOS"176177 # Knowledge sources: books, docs, courses, articles, etc.178 knowledge:179 domains:180 web_development: "Focus on performance and accessibility"181 ml_ops: "Experience deploying ML models to production"182183 sources:184 - title: "Clean Code"185 source_type: "book"186 insights:187 - "Functions should do one thing"188 - "Prefer meaningful names over documentation"189 - title: "React Documentation"190 source_type: "document"191 url: "https://react.dev"192 insights:193 - "Prefer Server Components for data fetching"194195 # Agent-callable skills (Anthropic SKILL.md format)196 skills:197 - name: "code-formatter"198 description: "Format code using project conventions"199 visibility: "public"200 tags: ["automation", "code-quality"]201 - name: "deploy-staging"202 description: "Deploy current branch to staging environment"203 visibility: "team"204 - name: "expense-reporter"205 description: "Generate expense reports from receipts"206 visibility: "private"207208team_context:209 organization: "Acme Corp"210 coding_standards: "ESLint + Prettier, PR reviews required"211 architecture_patterns: "Monorepo with shared packages"212 do_not_use:213 - "jQuery"214 - "Class components in React"215```216217---218219## MCP Resources220221tilde exposes these resources to agents:222223| Resource URI | Description |224|-------------|-------------|225| `tilde://user/profile` | Full user profile |226| `tilde://user/identity` | Name, role, experience, custom fields |227| `tilde://user/tech_stack` | Languages, preferences, environment |228| `tilde://user/knowledge` | Knowledge sources, domains, projects |229| `tilde://user/skills` | Skills (filtered by visibility) |230| `tilde://user/experience` | Work history |231| `tilde://user/education` | Education background |232| `tilde://user/projects` | Personal/open-source projects |233| `tilde://user/publications` | Papers and publications |234| `tilde://team/context` | Team coding standards and patterns |235236---237238## MCP Tools239240| Tool | Description |241|------|-------------|242| `get_profile` | Retrieve full or partial profile |243| `get_team_context` | Get team-specific context |244| `propose_update` | Agent proposes a profile update (queued for approval) |245| `list_pending_updates` | List updates awaiting user approval |246247---248249## CLI Commands250251```bash252tilde init # Create default profile253tilde show # Display current profile254tilde show skills # Show skills section only255tilde show --full # Show full content without truncation256tilde edit # Open profile in $EDITOR257tilde config # Show current configuration258tilde pending # List pending agent updates259tilde approve <id> [id2...] # Approve one or more updates260tilde reject <id> [id2...] # Reject one or more updates261tilde approve --all # Approve all pending updates262tilde reject --all # Reject all pending updates263tilde approve --all -e <id> # Approve all except one264tilde log # View update history265tilde ingest <file> # Extract insights from a document266tilde export --format json # Export profile267```268269### Document Ingestion270271```bash272# Ingest a book and extract insights273tilde ingest "~/Books/DDIA.pdf" --topic data_systems274275# Dry run to preview what would be extracted276tilde ingest notes.md --dry-run277278# Auto-approve high-confidence updates279tilde ingest paper.pdf --auto-approve 0.8280```281282### Resume Import283284Bootstrap your profile from an existing resume:285286```bash287# Import resume (PDF, DOCX, or text)288tilde ingest ~/Documents/resume.pdf --type resume289290# Preview what would be extracted291tilde ingest resume.pdf --type resume --dry-run292293# Auto-approve high-confidence items294tilde ingest resume.pdf --type resume --auto-approve 0.8295```296297The resume importer extracts:298- **Identity**: Name, role, years of experience299- **Experience**: Work history with companies, roles, dates300- **Education**: Degrees, institutions, graduation years301- **Tech Stack**: Programming languages, frameworks, tools302- **Projects**: Personal and open-source projects303- **Publications**: Papers, patents, articles304305### Skills Management306307Manage Anthropic-format skills with full bundling support:308309```bash310# Import skills from Anthropic skills directory311tilde skills import /path/to/skills312313# Import specific skills by name314tilde skills import /path/to/skills -n mcp-builder -n pdf315316# Dry run to preview import317tilde skills import ./skills --dry-run318319# Import as private skills320tilde skills import ./skills --visibility private321322# List all imported skills323tilde skills list324325# Export skills to Anthropic format326tilde skills export ./my-skills327328# Export specific skill329tilde skills export ./output -n mcp-builder330331# Delete skills332tilde skills delete skill-name333tilde skills delete --all --force334```335336The skill importer bundles:337- **SKILL.md**: Skill content with YAML frontmatter338- **scripts/**: Python scripts and utilities339- **references/**: Documentation files340- **templates/**: Template files341- **assets/**: Static assets342- **Root files**: LICENSE.txt, etc.343344All bundled resources are preserved through import โ persist โ export.345346### Team Management347348```bash349# Create a team350tilde team create myteam --name "My Startup" --org "ACME Corp"351352# Activate team context (applies to all profile queries)353tilde team activate myteam354355# Sync team config from URL or git repo356tilde team sync https://example.com/team.json --activate357tilde team sync git@github.com:myorg/team-config.git --activate358359# List and manage teams360tilde team list361tilde team show362tilde team edit363tilde team deactivate364```365366---367368## Storage Backends369370tilde supports multiple storage backends:371372| Backend | Use Case | Command |373|---------|----------|---------|374| **YAML** (default) | Human-readable, git-friendly | `TILDE_STORAGE=yaml` |375| **SQLite** | Queryable, memories, faster at scale | `TILDE_STORAGE=sqlite` |376| **Mem0** | Semantic search via embeddings | `TILDE_STORAGE=mem0` |377378```bash379# Use SQLite backend380export TILDE_STORAGE=sqlite381tilde init382383# Query profile fields (SQLite only)384uv run python -c "385from tilde.storage import get_storage386storage = get_storage(backend='sqlite')387print(storage.query('%languages%'))388"389```390391---392393## Configuration394395tilde uses a centralized configuration for LLM and embedding settings. Configuration is stored in `~/.tilde/config.yaml` and can be synced across devices.396397### Configuration Priority3983991. **Environment variables** (highest priority)4002. **Config file** (`~/.tilde/config.yaml`)4013. **Built-in defaults** (lowest priority)402403### Environment Variables404405| Variable | Description | Default |406|----------|-------------|---------|407| `GOOGLE_API_KEY` | Google/Gemini API key (primary) | Required |408| `OPENAI_API_KEY` | OpenAI API key (fallback) | Optional |409| `TILDE_LLM_MODEL` | LLM model for document ingestion | `gemini-3-flash-preview` |410| `TILDE_EMBEDDING_MODEL` | Embedding model for semantic search | `gemini-embedding-001` |411| `TILDE_STORAGE` | Storage backend (yaml, sqlite, mem0) | `yaml` |412| `TILDE_PROFILE` | Custom profile path | `~/.tilde/profile.yaml` |413414### Managing Configuration415416```bash417# View current configuration418tilde config419420# Save settings to config file (for syncing across devices)421tilde config --save422423# Modify a setting and save424tilde config --set llm_model=gemini-1.5-pro425426# Show config file path427tilde config --path428```429430> **Note**: API keys are NEVER saved to the config file for security. Always set them via environment variables.431432### Quick Setup433434```bash435# Minimal setup (just one API key!)436export GOOGLE_API_KEY="your-google-api-key"437438# Save your settings for this device439tilde config --save440441# Now you can use all features442tilde ingest paper.pdf443```444445### Syncing Across Devices446447The config file at `~/.tilde/config.yaml` is designed to be synced:4484491. **Via dotfiles repo**: Add `~/.tilde/` to your dotfiles4502. **Via cloud sync**: Dropbox, iCloud, or similar4513. **Manually**: Copy the file to new devices452453Example config file:454```yaml455llm_model: gemini-3-flash-preview456llm_temperature: 0.7457embedding_model: gemini-embedding-001458embedding_dimensions: 768459storage_backend: yaml460```461462### Programmatic Configuration463464```python465from tilde.config import get_config, call_llm, get_embedding, save_config466467# Check current config468config = get_config()469print(f"Provider: {config.provider}")470print(f"LLM Model: {config.llm_model}")471472# Use directly473response = call_llm("Summarize this document...")474embedding = get_embedding("Some text to embed")475```476477---478479## Roadmap480481- [x] **Phase 1**: MVP with profile reading482- [x] **Phase 2**: Agent-proposed updates with approval flow483- [x] **Phase 3**: Document ingestion (books, PDFs)484- [x] **Phase 4**: Team sync for B2B use cases485- [x] **Phase 5**: SQLite and Mem0 storage backends486- [x] **Phase 6**: Skill Management (Anthropic SKILL.md format)487 - [x] Batch import from directory with `tilde skills import`488 - [x] Export to directory with `tilde skills export`489 - [x] Full bundling of scripts, references, templates, assets490 - [x] Deduplication by skill name491492---493494## Why "tilde"?495496In Unix, `~` (tilde) represents your home directory โ the place where your personal configuration lives. **tilde** is the home for your AI identity.497498---499500## Philosophy5015021. **Your Data, Your Control**: Local by default, sync only if you choose5032. **Human-in-the-Loop**: Agents propose, humans decide5043. **Portable & Open**: Export anytime, no lock-in, works with any MCP tool5054. **Progressive Disclosure**: Start simple, add complexity as needed506507---508509## License510511MIT512513---514515<p align="center">516 <i>Configure once. Use everywhere. Your data, your control.</i>517</p>518
Full transparency โ inspect the skill content before installing.