[project] name = "montycat-mcp" version = "1.1.5" description = "Shared, persistent memory for AI agents: a self-hosted MCP server with semantic search." readme = "README.md" requires-python = ">=3.10" license = "MIT" license-files = ["LICENSE"] authors = [{ name = "MontyGovernance" }] maintainers = [{ name = "MontyGovernance" }] keywords = [ "mcp", "mcp-server", "model-context-protocol", "montycat", "vector-database", "vector-search", "semantic-search", "rag", "retrieval-augmented-generation", "ai-memory", "agent-memory", "shared-memory", "persistent-memory", "multi-agent-memory", "cross-session-memory", "agent-collaboration", "long-term-memory", "memory-server", "ai-agents", "llm", "nosql", "embeddings", "self-hosted", "fastmcp", "claude", "claude-desktop", "cursor", "openai", "codex", "data-governance", ] classifiers = [ "Development Status :: 4 - Beta", "Environment :: Console", "Framework :: AsyncIO", "Intended Audience :: Developers", "Operating System :: OS Independent", "Programming Language :: Python :: 3", "Programming Language :: Python :: 3 :: Only", "Programming Language :: Python :: 3.10", "Programming Language :: Python :: 3.11", "Programming Language :: Python :: 3.12", "Programming Language :: Python :: 3.13", "Topic :: Database", "Topic :: Scientific/Engineering :: Artificial Intelligence", "Topic :: Software Development :: Libraries :: Application Frameworks", ] dependencies = [ # Upper bound is deliberate: the real-time watch surface reaches into SDK # internals (`_mcp_server`, a hand-built InitializationOptions to flip the # hardcoded `resources.subscribe=False`, and the low-level subscribe # handlers). A major bump must be re-verified rather than silently dropping # push support — see montycat_mcp/watch.py and server.py `_run_stdio`. "mcp[cli]>=1.2.0,<2", # 1.2.2 adds query/write vectors, external-vector enrollment, semantic # status, and re-embedding; 1.2.3 adds the unified `search_values` with # BM25 keyword and hybrid ranking. Version 1.2.5 preserves schema and # timestamp metadata across single and bulk updates. Montycat MCP exposes # these surfaces without compatibility fallbacks. "montycat>=1.2.5,<2", ] [project.scripts] montycat-mcp = "montycat_mcp.server:main" memocat-mcp = "montycat_mcp.server:main" [project.urls] Homepage = "https://montygovernance.com" Documentation = "https://montygovernance.com/docs" Repository = "https://github.com/MontyGovernance/montycat-mcp" Issues = "https://github.com/MontyGovernance/montycat-mcp/issues" Changelog = "https://github.com/MontyGovernance/montycat-mcp/blob/master/CHANGELOG.md" [build-system] requires = ["hatchling"] build-backend = "hatchling.build" [tool.hatch.build.targets.wheel] packages = ["montycat_mcp", "memocat_mcp"] [tool.hatch.build.targets.sdist] include = [ "/montycat_mcp", "/memocat_mcp", "/tests", "/README.md", "/LICENSE", "/CHANGELOG.md", "/pyproject.toml", "/Dockerfile", "/compose.yaml", "/server.json", "/manifest.json", "/mcpb_entry.py", "/PRIVACY.md", ] [project.optional-dependencies] test = [ "pytest>=8", "pytest-asyncio>=0.24", "tomli>=2; python_version < '3.11'", ] [tool.pytest.ini_options] asyncio_mode = "auto" asyncio_default_fixture_loop_scope = "function" testpaths = ["tests"]