Files
mdmem/pyproject.toml
Markus cc536b80ab feat(p3): MCP server — six memory_* tools, bearer auth, idempotency, audit log
Uses mcp 2.2.0 (FastMCP is MCPServer there) with stateless streamable HTTP.
The SDK's DNS-rebinding protection checks the Host header, so the in-cluster
name Bifrost dials is an explicit allow-list entry (MCP_ALLOWED_HOSTS) —
otherwise every proxied call returns 421 and looks like an mdmem bug.
Agent edits to active notes become inbox revisions; no delete tool exists.
2026-09-12 08:00:06 +00:00

58 lines
1.3 KiB
TOML

[project]
name = "mdmem"
version = "0.1.0"
description = "Markdown-canonical agent memory service: hybrid retrieval over a markdown vault, MCP + web UI"
readme = "README.md"
requires-python = ">=3.12"
license = { text = "MIT" }
dependencies = [
"fastapi==0.121.2",
"uvicorn[standard]==0.38.0",
"mcp==2.2.0",
"sqlite-vec==0.1.6",
"ruamel.yaml==0.18.6",
"markdown-it-py==3.0.0",
"watchfiles==1.0.3",
"httpx==0.28.1",
"numpy==2.2.1",
"python-ulid==3.0.0",
"jinja2==3.1.5",
"authlib==1.4.0",
"itsdangerous==2.2.0",
"prometheus-client==0.21.1",
"pyyaml==6.0.2",
"python-multipart==0.0.20",
]
[project.optional-dependencies]
dev = [
"pytest==8.3.4",
"pytest-asyncio==0.25.2",
"hypothesis==6.123.7",
"ruff==0.9.2",
]
[project.scripts]
mdmem = "mdmem.cli:main"
[build-system]
requires = ["hatchling"]
build-backend = "hatchling.build"
[tool.hatch.build.targets.wheel]
packages = ["src/mdmem"]
[tool.pytest.ini_options]
testpaths = ["tests"]
asyncio_mode = "auto"
asyncio_default_fixture_loop_scope = "function"
markers = ["live: hits real Bifrost/llama-server; excluded from the default run"]
addopts = "-m 'not live' -q"
[tool.ruff]
line-length = 110
src = ["src", "tests"]
[tool.ruff.lint]
select = ["E", "F", "I", "UP", "B"]