Skip to content
This repository was archived by the owner on Mar 24, 2025. It is now read-only.
Merged
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
26 changes: 17 additions & 9 deletions src/create_mcp_server/__init__.py
Original file line number Diff line number Diff line change
Expand Up @@ -105,7 +105,9 @@ def get_package_directory(path: Path) -> Path:
return src_dir.parent


def copy_template(path: Path, name: str, version: str = "0.1.0") -> None:
def copy_template(
path: Path, name: str, description: str, version: str = "0.1.0"
) -> None:
"""Copy template files into src/<project_name>"""
template_dir = Path(__file__).parent / "template"

Expand All @@ -116,18 +118,24 @@ def copy_template(path: Path, name: str, version: str = "0.1.0") -> None:
env = Environment(loader=FileSystemLoader(str(template_dir)))

files = [
("__init__.py.jinja2", "__init__.py"),
("server.py.jinja2", "server.py"),
("__init__.py.jinja2", "__init__.py", target_dir),
("server.py.jinja2", "server.py", target_dir),
("README.md.jinja2", "README.md", path),
]

template_vars = {"server_name": name, "server_version": version}
template_vars = {
"server_name": name,
"server_version": version,
"server_description": description,
"server_directory": str(path.resolve()),
}

try:
for template_file, output_file in files:
for template_file, output_file, output_dir in files:
template = env.get_template(template_file)
rendered = template.render(**template_vars)

out_path = target_dir / output_file
out_path = output_dir / output_file
out_path.write_text(rendered)

except Exception as e:
Expand All @@ -136,7 +144,7 @@ def copy_template(path: Path, name: str, version: str = "0.1.0") -> None:


def create_project(
path: Path, name: str, version: str, use_claude: bool = True
path: Path, name: str, description: str, version: str, use_claude: bool = True
) -> None:
"""Create a new project using uv"""
path.mkdir(parents=True, exist_ok=True)
Expand All @@ -158,7 +166,7 @@ def create_project(
click.echo("❌ Error: Failed to add mcp dependency.", err=True)
sys.exit(1)

copy_template(path, name, version)
copy_template(path, name, description, version)

# Check if Claude.app is available
if (
Expand Down Expand Up @@ -313,7 +321,7 @@ def main(
click.echo("❌ Error: Invalid path. Project creation aborted.", err=True)
return 1

create_project(project_path, name, version, claudeapp)
create_project(project_path, name, description, version, claudeapp)
update_pyproject_settings(project_path, version, description)

return 0
53 changes: 53 additions & 0 deletions src/create_mcp_server/template/README.md.jinja2
Original file line number Diff line number Diff line change
@@ -0,0 +1,53 @@
# {{server_name}} MCP server

{{server_description}}

## Components

### Resources

The server implements a simple note storage system with:
- Custom note:// URI scheme for accessing individual notes
- Each note resource has a name, description and text/plain mimetype

### Prompts

The server provides a single prompt:
- summarize-notes: Creates summaries of all stored notes
- Optional "style" argument to control detail level (brief/detailed)
- Generates prompt combining all current notes with style preference

### Tools

The server implements one tool:
- add-note: Adds a new note to the server
- Takes "name" and "content" as required string arguments
- Updates server state and notifies clients of resource changes

## Install

### Claude Desktop

Run
```
mcp setup --app Claude
```

or by editing

On MacOS: `~/Library/Application\ Support/Claude/claude_desktop_config.json`
On Windows: `%APPDATA%/Claude/claude_desktop_config.json`

```
"mcpServers": {
"{{server_name}}": {
"command": "uv",
"args": [
"--directory",
"{{server_directory}}",
"run",
"{{server_name}}"
]
}
}
```