this is a template for creating personalized MCP servers. You can see larkin-mcp as an example, or check out my blog post about it here. It's technically a slightly more slimmed down version given I only really am trying to support uvx + pypi installs...
https://github.com/user-attachments/assets/e96afd9e-786a-4394-91f9-9030f6ad2461 (sorry in advance about the low rez)
this is using copier which is basically a more up to date cookiecutter + jinja project. I honestly hadn't heard of it before asking ChatGPT if there were alternatives or more up to date projects. But here we are.
a MCP server that exposes your professional information (or really whatever you want to throw in there) to LLMs that have MCP connection (codex, claude code, claude desktop).
this should really be all you need to do:
$ YOURNAME='TODO' # PUT YOUR ACTUAL NAME HERE
$ brew install copier # (macos or linux... sorry windows)
$ copier copy gh:johnlarkin1/yourname-mcp $YOURNAME-mcp$ brew install copier # or again uv tool install copier
$ YOURNAME='TODO' # PUT YOUR ACTUAL NAME HERE
$ git clone https://github.com/johnlarkin1/yourname-mcp.git
$ copier copy yourname-mcp my-mcp-projectSummary of what you're going to be asked for:
| Variable | Description | Example |
|---|---|---|
project_name |
PyPI package name | johnsmith-mcp |
person_full_name |
Your full name | John Smith |
person_first_name |
First name (for prompts) | John |
uri_scheme |
Resource URI scheme | smith (creates smith://resume) |
github_username |
Your GitHub username | johnsmith |
email |
Your email | john@example.com |
website_url |
Your website (optional) | https://johnsmith.dev |
location |
Your location (optional) | New York, NY |
populate this stuff!
src/resources/content/
├── bio.md # Your biography
├── contact.md # Contact information (pre-filled from prompts)
├── projects.md # Your projects
├── skills.md # Technical skills
├── work.md # Work experience
└── resume/
└── resume.md # Full resume
cd my-mcp-project/$YOURNAME-mcp
uv sync
uv run pytest
uv run $YOURNAME-mcpnote, this is a bit more involved. Feel free to email me about it, or ask ChatGPT / Claude, but you'll want to set up a PyPi account if you want to actually publish it.
uv build
uv publish # Requires PyPI tokenif you don't want to deal with pypi, you can just point claude desktop to your local project. the key is using uv run --directory to tell uv where your project lives:
{
"mcpServers": {
"yourname-mcp": {
"command": "uv",
"args": [
"run",
"--directory",
"/absolute/path/to/your/yourname-mcp",
"yourname-mcp"
]
}
}
}so if your project is at ~/code/johnsmith-mcp, it'd look like:
{
"mcpServers": {
"johnsmith-mcp": {
"command": "uv",
"args": [
"run",
"--directory",
"/Users/johnsmith/code/johnsmith-mcp",
"johnsmith-mcp"
]
}
}
}just make sure you've run uv sync in your project directory first!
after you've published it, you can set this up in claude code or you can basically extend your claude_desktop.config. the config is cleaner since uvx fetches it automatically.
here's an example for mine:
╭─johnlarkin@Mac ~/Documents/coding/yourname-mcp-proj
╰─➤ vim ~/Library/Application\ Support/Claude/claude_desktop_config.jsonyou'll want a similar path. And then you'll have something like:
{
"mcpServers": {
"yourname-mcp": {
"command": "uvx",
"args": ["yourname-mcp"]
}
}
}or for local (from within your project directory):
{
"mcpServers": {
"yourname-mcp": {
"command": "uv",
"args": ["run", "yourname-mcp"]
}
}
}Note
This section is Ai generated:
Your MCP server exposes these resources (via custom URI scheme):
{scheme}://resume- Full resume markdown{scheme}://bio- Biography{scheme}://projects- Project portfolio{scheme}://contact- Contact information{scheme}://skills- Technical skills{scheme}://work- Work history
get_resume(),get_bio(),get_projects(), etc. - Retrieve specific contentsearch_info(query)- Search across all resourceshealth_check()- Check server status
Pre-built prompts for common use cases:
summarize_for_role(role)- Tailored summary for a job rolecompare_to_job(job_description)- Analyze fit for a jobinterview_prep(role, company)- Interview preparationproject_deep_dive(project_name)- Detailed project info
