From f5a645d4b1c382cb9eaaf7f2a0cd8c754db89f01 Mon Sep 17 00:00:00 2001 From: Willis Kirkham Date: Wed, 11 Mar 2026 09:04:01 -0700 Subject: [PATCH] Adds Banksy FastMCP tech stack summary --- fastmcp-migration/tech-stack-summary.md | 34 +++++++++++++++++++++++++ 1 file changed, 34 insertions(+) create mode 100644 fastmcp-migration/tech-stack-summary.md diff --git a/fastmcp-migration/tech-stack-summary.md b/fastmcp-migration/tech-stack-summary.md new file mode 100644 index 0000000..ff7bd60 --- /dev/null +++ b/fastmcp-migration/tech-stack-summary.md @@ -0,0 +1,34 @@ +# Banksy Tech Stack Summary + +**Author:** Willis Kirkham +**Date:** 2026-03-11 + +--- + +Banksy is Mural's MCP server platform. + +## What It Is + +- Single-process **FastMCP** server that provides MCP access to Mural for both IDE clients and backend services +- Curated MCP tools with controlled naming, descriptions, and visibility +- Handles user authentication and per-request Mural token injection + +## Stack + +| Category | Choice | Notes | +| ---------------------- | ------------------------------------------------------- | ----------------------------------------------------------------------------------------------------- | +| Language | **Python >=3.12** | MCP ecosystem is Python-first; 3.12 for performance and `TaskGroup` | +| MCP framework | **FastMCP >=3.1** | Dominant framework (~19.5k stars); composition, DI, test utilities built in | +| Project and deps | **uv** | FastMCP uses it; native workspaces, single lockfile, fast (over Poetry) | +| Linting and formatting | **Ruff** | Single tool replacing Black + isort + flake8; same vendor as uv | +| Type checking | **Pyright** (editor) + **mypy** w/ Pydantic plugin (CI) | Pyright for DX speed; mypy catches Pydantic edge cases | +| Testing | **pytest** + **pytest-asyncio** | Required by FastMCP's in-memory test client | +| Database | **PostgreSQL** via **SQLAlchemy 2.0 async** (asyncpg) | Fully async ORM; token and session storage. Falls back to raw asyncpg + dbmate if schema stays simple | +| Migrations | **Alembic** | Standard companion to SQLAlchemy; replaced by dbmate if we drop to raw asyncpg | +| HTTP client | **httpx** + **httpx-retries** | Required by FastMCP internals; async, transport-level retries | +| Configuration | **pydantic-settings** | Pydantic-native env/file config; same pattern as FastMCP | +| Git hooks | **pre-commit** | Ecosystem standard; Ruff-only on commit, type checks in CI | + +## Known Limitations + +- **`structuredContent` not yet supported by FastMCP** — tools return JSON as stringified text; revisit when FastMCP adds support