# ntk148v/mcp-server-template architecture

> Architecture diagram of the GitHub repository ntk148v/mcp-server-template, generated by GitDiagram from its file tree, README and a sample of source files (last updated 2026-11-13). It is an AI-made overview: check details against the source.

- Interactive diagram: https://gitdiagram.com/ntk148v/mcp-server-template
- Repository: https://github.com/ntk148v/mcp-server-template

## Overview

This repository is a Cookiecutter template for generating Python MCP servers. A developer generates a project, then an MCP client uses the server over stdio or SSE to access registered tools, resources, and prompts; the sample tools also fetch weather data from the National Weather Service. The README documents Docker support, but deployment configuration is not part of the runtime workflow shown here. Source excerpts establish the server setup, transports, and feature registrations; generated-project wiring beyond those excerpts is not inferred.

Main entry points: [`{{cookiecutter.project_name}}/src/{{cookiecutter.module_name}}/server/__init__.py`](https://github.com/ntk148v/mcp-server-template/blob/master/%7B%7Bcookiecutter.project_name%7D%7D/src/%7B%7Bcookiecutter.module_name%7D%7D/server/__init__.py) (FastMCP instance), [`{{cookiecutter.project_name}}/src/{{cookiecutter.module_name}}/main.py`](https://github.com/ntk148v/mcp-server-template/blob/master/%7B%7Bcookiecutter.project_name%7D%7D/src/%7B%7Bcookiecutter.module_name%7D%7D/main.py) (Server entry), [`{{cookiecutter.project_name}}/src/{{cookiecutter.module_name}}/server/tools/tools.py`](https://github.com/ntk148v/mcp-server-template/blob/master/%7B%7Bcookiecutter.project_name%7D%7D/src/%7B%7Bcookiecutter.module_name%7D%7D/server/tools/tools.py) (Weather tools), [`{{cookiecutter.project_name}}/src/{{cookiecutter.module_name}}/server/resources/resources.py`](https://github.com/ntk148v/mcp-server-template/blob/master/%7B%7Bcookiecutter.project_name%7D%7D/src/%7B%7Bcookiecutter.module_name%7D%7D/server/resources/resources.py) (Resources)

## Diagram (Mermaid)

```mermaid
flowchart TD

subgraph group_template["Project template"]
end

subgraph group_runtime["MCP server runtime"]
  node_main["Server entry<br/>[main.py]"]
  node_fastmcp["FastMCP instance<br/>[__init__.py]"]
  node_transports["stdio / SSE<br/>[main.py]"]
end

subgraph group_features["MCP capabilities"]
  node_tools["Weather tools<br/>[tools.py]"]
  node_resources["Resources<br/>[resources.py]"]
  node_prompts["Prompt templates<br/>[prompts.py]"]
end

node_developer(("Developer"))
node_cookiecutter["Cookiecutter"]
node_client(("MCP client"))
node_nws["NWS API"]

node_developer -->|"generates project"| node_cookiecutter
node_cookiecutter -->|"renders template"| node_main
node_main -->|"imports server"| node_fastmcp
node_main -->|"selects transport"| node_transports
node_transports -->|"communicates via"| node_client
node_tools -->|"registers tools"| node_fastmcp
node_resources -->|"registers resources"| node_fastmcp
node_prompts -->|"registers prompts"| node_fastmcp
node_tools -->|"requests weather data"| node_nws

click node_main "https://github.com/ntk148v/mcp-server-template/blob/master/%7B%7Bcookiecutter.project_name%7D%7D/src/%7B%7Bcookiecutter.module_name%7D%7D/main.py"
click node_fastmcp "https://github.com/ntk148v/mcp-server-template/blob/master/%7B%7Bcookiecutter.project_name%7D%7D/src/%7B%7Bcookiecutter.module_name%7D%7D/server/__init__.py"
click node_transports "https://github.com/ntk148v/mcp-server-template/blob/master/%7B%7Bcookiecutter.project_name%7D%7D/src/%7B%7Bcookiecutter.module_name%7D%7D/main.py"
click node_tools "https://github.com/ntk148v/mcp-server-template/blob/master/%7B%7Bcookiecutter.project_name%7D%7D/src/%7B%7Bcookiecutter.module_name%7D%7D/server/tools/tools.py"
click node_resources "https://github.com/ntk148v/mcp-server-template/blob/master/%7B%7Bcookiecutter.project_name%7D%7D/src/%7B%7Bcookiecutter.module_name%7D%7D/server/resources/resources.py"
click node_prompts "https://github.com/ntk148v/mcp-server-template/blob/master/%7B%7Bcookiecutter.project_name%7D%7D/src/%7B%7Bcookiecutter.module_name%7D%7D/server/prompts/prompts.py"

classDef toneNeutral fill:#f8fafc,stroke:#334155,stroke-width:1.5px,color:#0f172a
classDef toneBlue fill:#dbeafe,stroke:#2563eb,stroke-width:1.5px,color:#172554
classDef toneAmber fill:#fef3c7,stroke:#d97706,stroke-width:1.5px,color:#78350f
classDef toneMint fill:#dcfce7,stroke:#16a34a,stroke-width:1.5px,color:#14532d
classDef toneRose fill:#ffe4e6,stroke:#e11d48,stroke-width:1.5px,color:#881337
classDef toneIndigo fill:#e0e7ff,stroke:#4f46e5,stroke-width:1.5px,color:#312e81
classDef toneTeal fill:#ccfbf1,stroke:#0f766e,stroke-width:1.5px,color:#134e4a
class node_main,node_fastmcp,node_transports toneAmber
class node_tools,node_resources,node_prompts,node_nws toneMint
class node_developer,node_cookiecutter toneIndigo
class node_client toneBlue
```

## Components

### MCP server runtime

- [Server entry](https://github.com/ntk148v/mcp-server-template/blob/master/%7B%7Bcookiecutter.project_name%7D%7D/src/%7B%7Bcookiecutter.module_name%7D%7D/main.py): `{{cookiecutter.project_name}}/src/{{cookiecutter.module_name}}/main.py`
- [FastMCP instance](https://github.com/ntk148v/mcp-server-template/blob/master/%7B%7Bcookiecutter.project_name%7D%7D/src/%7B%7Bcookiecutter.module_name%7D%7D/server/__init__.py): `{{cookiecutter.project_name}}/src/{{cookiecutter.module_name}}/server/__init__.py`
- [stdio / SSE](https://github.com/ntk148v/mcp-server-template/blob/master/%7B%7Bcookiecutter.project_name%7D%7D/src/%7B%7Bcookiecutter.module_name%7D%7D/main.py): `{{cookiecutter.project_name}}/src/{{cookiecutter.module_name}}/main.py`

### MCP capabilities

- [Weather tools](https://github.com/ntk148v/mcp-server-template/blob/master/%7B%7Bcookiecutter.project_name%7D%7D/src/%7B%7Bcookiecutter.module_name%7D%7D/server/tools/tools.py): `{{cookiecutter.project_name}}/src/{{cookiecutter.module_name}}/server/tools/tools.py`
- [Resources](https://github.com/ntk148v/mcp-server-template/blob/master/%7B%7Bcookiecutter.project_name%7D%7D/src/%7B%7Bcookiecutter.module_name%7D%7D/server/resources/resources.py): `{{cookiecutter.project_name}}/src/{{cookiecutter.module_name}}/server/resources/resources.py`
- [Prompt templates](https://github.com/ntk148v/mcp-server-template/blob/master/%7B%7Bcookiecutter.project_name%7D%7D/src/%7B%7Bcookiecutter.module_name%7D%7D/server/prompts/prompts.py): `{{cookiecutter.project_name}}/src/{{cookiecutter.module_name}}/server/prompts/prompts.py`

### Other components

- **Developer**
- **Cookiecutter**
- **MCP client**
- **NWS API**

## Connections

- Developer → Cookiecutter: generates project (evidence: `README.md`)
- Cookiecutter → Server entry: renders template (evidence: `README.md`)
- Server entry → FastMCP instance: imports server (evidence: `{{cookiecutter.project_name}}/src/{{cookiecutter.module_name}}/main.py`)
- Server entry → stdio / SSE: selects transport (evidence: `{{cookiecutter.project_name}}/src/{{cookiecutter.module_name}}/main.py`)
- stdio / SSE → MCP client: communicates via (evidence: `README.md`)
- Weather tools → FastMCP instance: registers tools (evidence: `{{cookiecutter.project_name}}/src/{{cookiecutter.module_name}}/server/tools/tools.py`)
- Resources → FastMCP instance: registers resources (evidence: `{{cookiecutter.project_name}}/src/{{cookiecutter.module_name}}/server/resources/resources.py`)
- Prompt templates → FastMCP instance: registers prompts (evidence: `{{cookiecutter.project_name}}/src/{{cookiecutter.module_name}}/server/prompts/prompts.py`)
- Weather tools → NWS API: requests weather data (evidence: `{{cookiecutter.project_name}}/src/{{cookiecutter.module_name}}/server/tools/tools.py`)
