# MCP server: `<server name>`

Purpose: the record of what this MCP server is, what it can reach, and what a host is
agreeing to when it connects. Save it as `README.md` beside `mcp-server.py`, fill in every
angle-bracketed blank, and update it in the same commit as any change to a tool description.
Platform: all. Minimum memory: 8 GB on the machine serving the model. Assumes: the server
from Part 24's second lab. Nothing in this file is a secret.

Anyone connecting this server should be able to answer the lesson's seven checklist questions
from this file alone. If they cannot, the file is not finished.

---

## Identity

| Field | Value |
| --- | --- |
| Server name | `<the name passed to MCPServer()>` |
| Version | `<version, or the commit you are pinning>` |
| Who wrote it | `<you, or the project and its repository URL>` |
| Protocol revision | `<the MCP specification revision it was tested against, e.g. 2026-07-28>` |
| SDK and version | `<MCP Python SDK version, as reported by pip show mcp>` |
| Last reviewed | `<date>` |

## Transport and reach

| Field | Value |
| --- | --- |
| Transport | `<stdio, or Streamable HTTP>` |
| If HTTP, bind address | `<127.0.0.1 only, or say why not>` |
| If HTTP, Origin validation | `<yes or no, and by what>` |
| If HTTP, authentication | `<what a caller must present>` |
| Network access made by the server | `<none, or every host it contacts>` |
| Runs as | `<your user, a dedicated user, or a container>` |

## What it reads and writes

Be specific. "The workspace" is not an answer; a path is.

| Path or resource | Read | Write | Why |
| --- | --- | --- | --- |
| `<path>` | `<yes/no>` | `<yes/no>` | `<what needs it>` |
| `<path>` | `<yes/no>` | `<yes/no>` | `<what needs it>` |

Credentials or secrets the server can reach: `<none, or name each one and say why>`

## Tools

One row per tool. The description column is the exact text the model receives, because that
is the text a reviewer has to read.

| Tool | Description, in full | Arguments | Side effects | Needs confirmation |
| --- | --- | --- | --- | --- |
| `<name>` | `<the whole description string>` | `<parameters and types>` | `<none, or what changes>` | `<yes/no>` |

## Resources and prompts

| Kind | URI or name | What it exposes |
| --- | --- | --- |
| `<resource or prompt>` | `<uri or name>` | `<what a host would get>` |

## Guard rails

What the server refuses, regardless of what it is asked:

- `<e.g. any path that resolves outside the collection root, including through a symlink>`
- `<e.g. any executable not on the allow-list>`
- `<e.g. a wall-clock timeout of N seconds and a memory limit of M megabytes per call>`
- `<e.g. every result truncated at N characters>`

## The trifecta check

Answer for this server together with everything else the host has connected.

| Capability | Present? | Through what |
| --- | --- | --- |
| Access to private data | `<yes/no>` | `<which tool>` |
| Exposure to untrusted content | `<yes/no>` | `<which tool, and whose content>` |
| An outward channel | `<yes/no>` | `<which tool>` |

If all three are yes: `<what you removed, or why you accept it and for how long>`

## How to run it

```
export AGENT_WORKSPACE=<path>
python3 mcp-server.py
```

Host configuration used, verbatim: `<the claude mcp add command, the opencode.json block, the
config.toml table, or the mcp.json entry>`

## Known limitations

- `<what it does badly, what it has not been tested with, what you would not trust it for>`

## Change log

| Date | Change | Did any tool description change? |
| --- | --- | --- |
| `<date>` | `<what changed>` | `<yes/no; if yes, every host must review again>` |
