Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
34 changes: 24 additions & 10 deletions CHANGELOG.md
Original file line number Diff line number Diff line change
Expand Up @@ -5,27 +5,41 @@ All notable changes to this project will be documented in this file.
The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.1.0/),
and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html).

## [Unreleased]

## [0.3.0] - 2026-03-23
## [1.1.0] - 2026-07-15

### Added

- **README banner** — `docs/assets/og-image.svg` now displayed as a full-width banner at the top of the README
- **Agent instruction file templates** — `templates/AGENTS.md` (for Windsurf/Cascade, Cline, Codex, and other agents) and `templates/.github/copilot-instructions.md` (for GitHub Copilot) ship with the package so users can drop them into their projects with one `cp` command
- **Agent Instructions Guide** — new `docs/ai-instructions.md` documents how to use `AGENTS.md` and `copilot-instructions.md` with mcp-me, including global VS Code setup, a before/after comparison table, and tips on combining profile context with project-specific rules
- **README "Agent Instruction Files" section** — quick-start snippet and link to the guide added between "Configure Your AI Assistant" and "Profile Schema"
- **Writing dimension** — `writing/style.yaml` format profiles and `writing/corpus/` for published texts
- **Corpus sync** — Medium, Substack, Blogger, and DEV.to generators write full articles to `writing/corpus/`
- **Writing MCP surface** — Resources `me://writing/style`, `me://writing/corpus`, `me://writing/samples`
- **Writing tools** — `analyze_writing_style`, `search_writing_corpus`, `get_writing_references`
- **Writing prompts** — `describe_my_writing`, `emulate_my_voice`, `rewrite_in_my_voice`
- **CLI commands** — `mcp-me sync-corpus`, `mcp-me analyze-writing`, `--no-corpus` flag on generate
- **Profile completeness** — `get_profile_completeness` tool with domain scores and generator suggestions
- **Open Plugins** — `voice-writer` and `style-analyst` agents, `writing-voice` skill, `match-voice` rule, `/emulate-voice` command

## [Unreleased]
### Changed

- **`ask_about_me`** — Description clarifies it returns context for the host LLM (not server-side Q&A)
- **`docs/ai-instructions.md`** — Documents writing MCP tools, prompts, and `get_profile_completeness`

## [1.0.0] - 2026-07-15

### Added

- **Open Plugins structure** — Full Cursor/Open Plugins layout at repo root for auto-detect on cursor.directory: `.cursor-plugin/plugin.json`, `mcp.json`, `rules/`, `skills/`, `agents/`, `commands/`, `hooks/hooks.json`, `.lsp.json`
- **Plugin validation** — `npm run validate:open-plugin` script and `tests/open-plugin-structure.test.ts`
- **Stable API declaration** — 8 core YAML schemas, MCP core surface, and `McpMePlugin` interface declared stable
- **Identity fields** — Optional `headline` and `physical` (opt-in) in `identity.yaml`
- **Schema fix** — `interests.topics` officially supported (generators already wrote this field)
- **Documentation** — `docs/identity-model.md`, `docs/generator-tiers.md`, `docs/migration-1.0.md`
- **Integration tests** — CLI, MCP server, and config-generate test suites
- **Plugin tests** — Behavioral tests for devto and wakatime plugins

### Changed

- **Directory submissions** — Opened Chrome handoff for mcp.so, Smithery, and Cursor Directory; built `mcp-me.mcpb` for Smithery; pushed wong2/awesome-mcp-servers PR branch; verified PulseMCP not yet indexed (registry active since 2026-07-10)
- **Cursor Directory** — Submission path updated to `cursor.directory/plugins/new` Auto (GitHub) now that Open Plugins components are in the repo
- **Plugin config docs** — Clarified `plugins.yaml` is legacy; use `.mcp-me.yaml`
- **Spotify plugin docs** — Aligned tool/resource names with implementation

## [0.6.0] - 2026-07-09

Expand Down
10 changes: 8 additions & 2 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -6,7 +6,9 @@

**Your AI assistants don't know who you are.** Every time you start a conversation with Claude, Copilot, Cursor, or Windsurf, it's a blank slate — no context about your skills, your projects, your career, or what you care about.

**mcp-me fixes that.** It creates a structured personal profile that any AI assistant can read via the [Model Context Protocol (MCP)](https://modelcontextprotocol.io/). Think of it as a **digital identity layer for AI** — your bio, career, skills, interests, projects, and more, always available to every AI tool you use.
**mcp-me fixes that.** It creates a structured personal profile that any AI assistant can read via the [Model Context Protocol (MCP)](https://modelcontextprotocol.io/). Think of it as a **complete digital identity layer for AI** — your bio, career, skills, interests, projects, writing voice, and more, always available to every AI tool you use.

See [Identity Model](docs/identity-model.md) for the full architecture vision.

```
You: "Write me a cover letter for this job"
Expand All @@ -17,7 +19,7 @@ AI: (reads your me://career, me://skills, me://projects)

## Why mcp-me?

- **AI that knows you** — Your assistants remember your skills, career, projects, and personality across every conversation
- **AI that knows you** — Your assistants remember your skills, career, projects, personality, and writing style across every conversation
- **Auto-generated** — Pull data from 329 registered generators (implemented across 44 generator source files) with one command
- **Privacy-first** — All data stays local in YAML files on your machine. Nothing is sent to any cloud.
- **Real-time plugins** — 13 live integrations (Spotify now playing, GitHub repos, Last.fm scrobbles) that AI queries on demand
Expand Down Expand Up @@ -126,6 +128,10 @@ All commands work with `npx` (zero install) or with `mcp-me` directly if install
personality.yaml ← Your data (traits, values)
goals.yaml ← Your data (short/long-term)
faq.yaml ← Your data (Q&A pairs)
writing/ ← Writing voice (1.1+)
style.yaml ← Format profiles and tone
corpus/ ← Your published texts (.md)
_manifest.yaml
```

## Configure Your AI Assistant
Expand Down
22 changes: 22 additions & 0 deletions agents/style-analyst.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,22 @@
---
name: style-analyst
description: Analyze and compare the user's writing style across format profiles.
---

# Style Analyst Agent

Use when the user wants to understand how they write or compare different writing contexts.

## Workflow

1. Read `me://writing/style` for defined format profiles
2. Call `analyze_writing_style` with optional profile filter
3. Compare profiles if requested (personal_blog vs tech_news)
4. Summarize: tone, sentence length, vocabulary, first-person usage, punctuation patterns
5. Suggest which profile fits a given writing task

## Output format

- **Overall voice** — shared traits across profiles
- **Per-profile** — how blog differs from news differs from social
- **Recommendations** — which profile to use for a given task
24 changes: 24 additions & 0 deletions agents/voice-writer.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,24 @@
---
name: voice-writer
description: Write text in the user's authentic voice using mcp-me writing corpus and format profiles.
---

# Voice Writer Agent

Use this agent when the user wants content written in their own voice.

## Workflow

1. Read `me://writing/style` to see format profiles (personal_blog, tech_news, ironic_thread)
2. Ask or infer which format profile fits the request
3. Call `get_writing_references` with the topic and profile
4. Read `me://writing/samples?profile=<name>` for tone examples
5. Load factual context from `me://career`, `me://skills`, `me://projects` as needed
6. Use the `emulate_my_voice` prompt with topic, profile, and references
7. Produce authentic text — never generic filler

## Rules

- Match the selected format profile's tone and length
- Cite real experiences from the profile when relevant
- Do not mention that you are emulating — write naturally
23 changes: 23 additions & 0 deletions commands/emulate-voice.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,23 @@
# Emulate Voice

Write content in the user's authentic voice using mcp-me writing corpus.

## Usage

```
/emulate-voice <topic> [--profile personal_blog|tech_news|ironic_thread]
```

## Steps

1. Load writing style from `me://writing/style`
2. Get references via `get_writing_references(topic, profile)`
3. Read samples from `me://writing/samples?profile=<profile>`
4. Invoke `emulate_my_voice` prompt with topic and profile
5. Output the generated text

## Examples

- `/emulate-voice Rust async patterns --profile personal_blog`
- `/emulate-voice AI regulation --profile tech_news`
- `/emulate-voice hot take on tabs vs spaces --profile ironic_thread`
18 changes: 18 additions & 0 deletions docs/ai-instructions.md
Original file line number Diff line number Diff line change
Expand Up @@ -100,6 +100,24 @@ documentation, career questions, open-source contributions, etc.
| `me://personality` | Traits, values, work style |
| `me://goals` | Short and long-term goals |
| `me://faq` | Pre-answered facts about me |
| `me://writing/style` | Writing format profiles and voice guide (1.1+) |
| `me://writing/corpus` | Published texts manifest (1.1+) |
| `me://writing/samples` | Writing excerpts by format profile (1.1+) |

## Writing and voice (1.1+)

For writing tasks, also use these MCP tools and prompts:

| Tool / Prompt | When to use |
|---|---|
| `get_writing_references(topic, profile)` | Find corpus excerpts before drafting |
| `analyze_writing_style(profile?)` | Stats on tone, sentence length, vocabulary |
| `search_writing_corpus(query)` | Keyword search across local `.md` files |
| `emulate_my_voice` prompt | Generate text in my voice for a topic |
| `rewrite_in_my_voice` prompt | Rewrite text to match my style |
| `get_profile_completeness` | See what's missing from my profile |

**Note:** `ask_about_me` returns structured profile context for the host LLM to interpret — mcp-me does not run an LLM server-side.

## When to proactively load my profile

Expand Down
2 changes: 1 addition & 1 deletion docs/creating-plugins.md
Original file line number Diff line number Diff line change
Expand Up @@ -293,7 +293,7 @@ Every registered built-in plugin is automatically tested by `tests/plugins/plugi
| Plugin | Resources | Tools | Auth |
|---|---|---|---|
| **github** | profile, repos, activity, languages | `get_github_repos` | Optional token |
| **spotify** | now playing, top artists, top tracks, recently played | `get_spotify_top`, `get_spotify_now_playing` | OAuth (refresh token) |
| **spotify** | top artists, top tracks, recently played | `get_spotify_now_playing`, `get_spotify_music_taste` | OAuth (refresh token) |
| **linkedin** | profile, experience, education, skills | `search_linkedin_data` | Data export JSON |
| **wakatime** | stats, languages, activity | `get_wakatime_stats` | Optional API key |
| **devto** | profile, articles | `get_devto_articles` | Optional API key |
Expand Down
73 changes: 73 additions & 0 deletions docs/generator-tiers.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,73 @@
# Generator Tiers

mcp-me registers **329 generators**. Not all fetch live data — this document explains what each tier means so you can set honest expectations.

## Tiers

| Tier | Definition | What you get |
|------|------------|--------------|
| **Verified** | Real public API + behavioral tests | Rich, accurate profile data |
| **Partial** | Real API, structural tests only | Working data, less test coverage |
| **Static** | User input → placeholder link + FAQ | Social link and a FAQ entry, no fetch |

## Verified generators

These have real API integration and behavioral tests:

| Generator | Category | Data populated |
|-----------|----------|----------------|
| `github` | code | identity, skills, projects, career, interests, faq |
| `gitlab` | code | identity, skills, projects, faq |
| `npm` | packages | projects, faq |
| `devto` | writing | identity, projects, skills, faq |
| `medium` | writing | identity, projects, skills, interests, faq |
| `substack` | writing | identity, projects, faq |
| `blogger-backup` | writing | projects, faq (from XML export) |
| `hashnode` | writing | identity, projects, faq |
| `wordpress` | writing | projects, faq |
| `linkedin` | identity | identity, career, skills, faq (JSON export) |
| `goodreads` | interests | interests, faq |
| `stackoverflow` | code | skills, faq |
| `orcid` | learning | career, projects, faq |
| `semantic-scholar` | learning | projects, faq |
| `openlibrary` | writing | projects, interests, faq |
| `youtube` | writing | projects, faq |

## Partial generators

Real APIs with structural/harness tests:

| Generator | Notes |
|-----------|-------|
| `bluesky` | Public AT Protocol API |
| `reddit` | Public JSON endpoints |
| `mastodon` | Public API |
| `hackernews` | Firebase API |
| `npm` | Registry API |
| `wakatime` | Requires API key |
| `gravatar` | Email hash lookup |
| `keybase` | Public API |

## Static generators (~284)

Batch generators in `batch-*.ts` files accept a username or ID and produce:

- A social link in `identity.contact.social`
- A FAQ entry describing presence on that platform
- Sometimes `interests.topics` tags

They do **not** call external APIs. They are useful for documenting your presence across many platforms when you don't need live data.

Examples: `--notion`, `--obsidian`, `--duolingo`, `--peloton`, `--zodiac`, `--mbti`

## Writing generators and corpus (1.1+)

Verified writing generators (Medium, Substack, Blogger, DEV.to) also sync full article text to `writing/corpus/` when corpus sync is enabled (default). Use `--no-corpus` to opt out.

## Choosing generators

1. Start with **Verified** sources you actually use: `--github`, `--devto`, `--medium`
2. Add **Partial** sources for live social presence
3. Use **Static** generators only to document platform links — not for rich data

Run `mcp-me generate --help` to see all available flags grouped by category.
80 changes: 80 additions & 0 deletions docs/identity-model.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,80 @@
# Identity Model

mcp-me is a **complete digital identity layer** for any AI assistant connected via MCP. It aggregates who you are, what you've done, what you know, what you care about, and how you write — all from local YAML files and optional live plugins.

## North star

> **mcp-me transforms any AI from a generic assistant into one that knows you.**

When connected to Claude, Copilot, Cursor, Windsurf, or any MCP client, the agent can answer questions and produce content grounded in your real profile — not generic placeholders.

## Identity domains

| Domain | YAML / Resource | What it covers |
|--------|-----------------|----------------|
| **Who I am** | `identity.yaml` → `me://identity` | Name, bio, headline, location, contact, social links, optional physical attributes |
| **Career** | `career.yaml` → `me://career` | Work experience, education, certifications |
| **Skills** | `skills.yaml` → `me://skills` | Technical/soft skills, tools, programming languages |
| **Projects** | `projects.yaml` → `me://projects` | Open-source, articles, packages, portfolio |
| **Interests** | `interests.yaml` → `me://interests` | Hobbies, topics, music, books, travel |
| **Personality** | `personality.yaml` → `me://personality` | Traits, values, work style, motivations |
| **Goals** | `goals.yaml` → `me://goals` | Short/medium/long-term aspirations |
| **FAQ** | `faq.yaml` → `me://faq` | Pre-answered facts — persistent memory |
| **Writing** | `writing/` → `me://writing/*` | Style profiles, corpus of real texts (1.1+) |
| **Live presence** | Plugins → `me://github/*`, etc. | Real-time data (Spotify, GitHub, Last.fm…) |

Writing is a **first-class dimension** but never isolated — emulated text should cite real experiences, projects, and opinions from the rest of the profile.

## Data flow

```
Sources (APIs, exports, manual YAML, local corpus)
Generators (batch) + Manual edits
Profile directory (~/.mcp-me)
mcp-me serve → MCP resources, tools, prompts
Any MCP client (agent-agnostic)
```

### Generators vs plugins

| | Generators | Plugins |
|---|-----------|---------|
| **When** | One-time (`mcp-me generate`) | Live during `mcp-me serve` |
| **Output** | Static YAML files | MCP resources/tools on demand |
| **Auth** | Usually none (public APIs) | Sometimes OAuth (Spotify) |

## Agent-agnostic design

Core value lives in the **MCP server** — not in Cursor-specific rules or skills. Open Plugins (rules, skills, agents, commands) are **accelerators** for Cursor users, not requirements.

### Core MCP surface

**Resources:** `me://identity`, `me://career`, `me://skills`, `me://interests`, `me://personality`, `me://goals`, `me://projects`, `me://faq`, plus `me://writing/*` (1.1+)

**Tools:**
- `ask_about_me` — Returns structured profile context for the host LLM to interpret (not server-side Q&A)
- `search_profile` — Keyword search across all profile data
- Writing tools (1.1+): `analyze_writing_style`, `search_writing_corpus`, `get_writing_references`
- `get_profile_completeness` (1.2+) — Profile fill percentage and generator suggestions

**Prompts:** `introduce_me`, `summarize_career`, `technical_profile`, `collaboration_fit`, plus writing prompts (1.1+)

## Privacy

- All profile data stays **local** on your machine
- Sensitive fields (`identity.physical`, etc.) are **opt-in only** — never populated by generators
- Secrets use `_env` suffix keys in `.mcp-me.yaml` — never stored in YAML profile files

## Stable API (1.0+)

The following are declared stable as of mcp-me 1.0.0:

- 8 core YAML schemas (`identity`, `career`, `skills`, `interests`, `personality`, `goals`, `projects`, `faq`)
- Core MCP resources, tools, and prompts listed above
- `McpMePlugin` interface in `src/plugin-engine/types.ts`

See [Migration Guide](migration-1.0.md) for upgrading from 0.x.
2 changes: 1 addition & 1 deletion docs/index.html
Original file line number Diff line number Diff line change
Expand Up @@ -64,7 +64,7 @@
"license": "https://opensource.org/licenses/MIT",
"codeRepository": "https://github.com/paladini/mcp-me",
"programmingLanguage": "TypeScript",
"softwareVersion": "0.6.0"
"softwareVersion": "1.1.0"
}
</script>

Expand Down
Loading
Loading