From 66571e16c1c7554baebfaa590c40fc8067c7673a Mon Sep 17 00:00:00 2001 From: Bryan Van Deusen Date: Mon, 23 Mar 2026 21:21:55 -0400 Subject: [PATCH] feat: scaffold fable-mcp Python package pyproject.toml with mcp[cli]/httpx/python-dotenv deps, entry point fable-mcp=fable_mcp.server:main, dev deps for testing. Co-Authored-By: Claude Sonnet 4.6 --- fable-mcp/.env.example | 2 ++ fable-mcp/fable_mcp/__init__.py | 0 fable-mcp/fable_mcp/tools/__init__.py | 0 fable-mcp/pyproject.toml | 24 ++++++++++++++++++++++++ fable-mcp/tests/__init__.py | 0 fable-mcp/tests/conftest.py | 12 ++++++++++++ 6 files changed, 38 insertions(+) create mode 100644 fable-mcp/.env.example create mode 100644 fable-mcp/fable_mcp/__init__.py create mode 100644 fable-mcp/fable_mcp/tools/__init__.py create mode 100644 fable-mcp/pyproject.toml create mode 100644 fable-mcp/tests/__init__.py create mode 100644 fable-mcp/tests/conftest.py diff --git a/fable-mcp/.env.example b/fable-mcp/.env.example new file mode 100644 index 0000000..767f8d0 --- /dev/null +++ b/fable-mcp/.env.example @@ -0,0 +1,2 @@ +FABLE_URL=http://localhost:5000 +FABLE_API_KEY=fmcp_your_key_here diff --git a/fable-mcp/fable_mcp/__init__.py b/fable-mcp/fable_mcp/__init__.py new file mode 100644 index 0000000..e69de29 diff --git a/fable-mcp/fable_mcp/tools/__init__.py b/fable-mcp/fable_mcp/tools/__init__.py new file mode 100644 index 0000000..e69de29 diff --git a/fable-mcp/pyproject.toml b/fable-mcp/pyproject.toml new file mode 100644 index 0000000..57b804d --- /dev/null +++ b/fable-mcp/pyproject.toml @@ -0,0 +1,24 @@ +[build-system] +requires = ["hatchling"] +build-backend = "hatchling.build" + +[project] +name = "fable-mcp" +version = "0.1.0" +description = "MCP server for Fabled Assistant" +requires-python = ">=3.12" +dependencies = [ + "mcp[cli]>=1.0", + "httpx>=0.27", + "python-dotenv>=1.0", +] + +[project.scripts] +fable-mcp = "fable_mcp.server:main" + +[project.optional-dependencies] +dev = ["pytest>=8.0", "pytest-asyncio>=0.23", "respx>=0.21"] + +[tool.pytest.ini_options] +asyncio_mode = "auto" +testpaths = ["tests"] diff --git a/fable-mcp/tests/__init__.py b/fable-mcp/tests/__init__.py new file mode 100644 index 0000000..e69de29 diff --git a/fable-mcp/tests/conftest.py b/fable-mcp/tests/conftest.py new file mode 100644 index 0000000..716448c --- /dev/null +++ b/fable-mcp/tests/conftest.py @@ -0,0 +1,12 @@ +"""Shared pytest fixtures for fable-mcp tests.""" +from unittest.mock import AsyncMock, MagicMock +import pytest + + +@pytest.fixture +def mock_client(): + """A mock FableClient that returns empty responses by default.""" + client = AsyncMock() + client.__aenter__ = AsyncMock(return_value=client) + client.__aexit__ = AsyncMock(return_value=False) + return client