mirror of
https://github.com/modelcontextprotocol/servers.git
synced 2026-04-18 08:54:10 +02:00
SQLite MCP Server update with demo
This commit is contained in:
@@ -37,12 +37,18 @@ The server offers six core tools:
|
||||
## Installation
|
||||
|
||||
```bash
|
||||
# Required: Python 3.10+
|
||||
python -m pip install mcp-sqlite-server
|
||||
|
||||
# Run with default settings
|
||||
mcp-sqlite-server
|
||||
|
||||
# Run with custom database and Anthropic integration
|
||||
mcp-sqlite-server --db-path ~/analysis.db --anthropic-key sk-xxx
|
||||
# Add the server to your claude_desktop_config.json
|
||||
"mcpServers": {
|
||||
"sqlite": {
|
||||
"command": "uv",
|
||||
"args": [
|
||||
"--directory",
|
||||
"parent_of_servers_repo/servers/src/sqlite",
|
||||
"run",
|
||||
"sqlite",
|
||||
"--db-path",
|
||||
"~/test.db"
|
||||
]
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
@@ -6,7 +6,6 @@ readme = "README.md"
|
||||
requires-python = ">=3.11"
|
||||
dependencies = [
|
||||
"mcp>=0.9.1",
|
||||
"anthropic>=0.39.0",
|
||||
]
|
||||
|
||||
[build-system]
|
||||
|
||||
@@ -10,12 +10,9 @@ def main():
|
||||
parser.add_argument('--db-path',
|
||||
default="./sqlite_mcp_server.db",
|
||||
help='Path to SQLite database file')
|
||||
parser.add_argument('--anthropic-api-key',
|
||||
default=os.environ.get('ANTHROPIC_API_KEY'),
|
||||
help='Anthropic API key (can also be set via ANTHROPIC_API_KEY environment variable)')
|
||||
|
||||
args = parser.parse_args()
|
||||
asyncio.run(server.main(args.db_path, args.anthropic_api_key))
|
||||
asyncio.run(server.main(args.db_path))
|
||||
|
||||
|
||||
# Optionally expose other important items at package level
|
||||
|
||||
@@ -7,14 +7,12 @@ from mcp.server.models import InitializationOptions
|
||||
import mcp.types as types
|
||||
from mcp.server import NotificationOptions, Server, AnyUrl
|
||||
import mcp.server.stdio
|
||||
from anthropic import Anthropic
|
||||
|
||||
# Set up logging to file
|
||||
log_file = Path('mcp_server.log')
|
||||
handler = RotatingFileHandler(log_file, maxBytes=10*1024*1024, backupCount=5)
|
||||
formatter = logging.Formatter('%(asctime)s - %(name)s - %(levelname)s - %(message)s')
|
||||
handler.setFormatter(formatter)
|
||||
|
||||
logger = logging.getLogger('mcp_sqlite_server')
|
||||
logger.setLevel(logging.DEBUG)
|
||||
logger.addHandler(handler)
|
||||
@@ -25,23 +23,6 @@ class McpServer(Server):
|
||||
"""Initialize connection to the SQLite database"""
|
||||
logger.debug("Initializing database connection")
|
||||
with closing(sqlite3.connect(self.db_path)) as conn:
|
||||
<<<<<<< HEAD
|
||||
with closing(conn.cursor()) as cursor:
|
||||
cursor.execute("""
|
||||
CREATE TABLE IF NOT EXISTS notes (
|
||||
name TEXT PRIMARY KEY,
|
||||
content TEXT NOT NULL
|
||||
)
|
||||
""")
|
||||
# Add example note if table is empty
|
||||
cursor.execute("SELECT COUNT(*) FROM notes")
|
||||
if cursor.fetchone()[0] == 0:
|
||||
cursor.execute(
|
||||
"INSERT INTO notes (name, content) VALUES (?, ?)",
|
||||
("example", "This is an example note."),
|
||||
)
|
||||
conn.commit()
|
||||
=======
|
||||
conn.row_factory = sqlite3.Row
|
||||
conn.close()
|
||||
|
||||
@@ -53,81 +34,17 @@ class McpServer(Server):
|
||||
|
||||
insights = "\n".join(f"- {insight}" for insight in self.insights)
|
||||
|
||||
if self.anthropic_api_key is None:
|
||||
memo = "📊 Business Intelligence Memo 📊\n\n"
|
||||
memo += "Key Insights Discovered:\n\n"
|
||||
memo += insights
|
||||
|
||||
if len(self.insights) > 1:
|
||||
memo += "\nSummary:\n"
|
||||
memo += f"Analysis has revealed {len(self.insights)} key business insights that suggest opportunities for strategic optimization and growth."
|
||||
|
||||
logger.debug("Generated basic memo format")
|
||||
return memo
|
||||
else:
|
||||
try:
|
||||
logger.debug("Requesting memo generation from Anthropic")
|
||||
prompt = """
|
||||
You are tasked with summarizing a set of business insights into a formal business memo. The insights are typically 1-2 sentences each and cover various aspects of the business. Your goal is to create a concise, well-organized memo that effectively communicates these insights to the recipient.
|
||||
>>>>>>> 67b071f (new SQLite server for demo and Getting started guide. Added contributing.md and pull_request_template.md)
|
||||
memo = "📊 Business Intelligence Memo 📊\n\n"
|
||||
memo += "Key Insights Discovered:\n\n"
|
||||
memo += insights
|
||||
|
||||
if len(self.insights) > 1:
|
||||
memo += "\nSummary:\n"
|
||||
memo += f"Analysis has revealed {len(self.insights)} key business insights that suggest opportunities for strategic optimization and growth."
|
||||
|
||||
logger.debug("Generated basic memo format")
|
||||
return memo
|
||||
|
||||
Here are the business insights you need to summarize:
|
||||
|
||||
<insights>
|
||||
{insights}
|
||||
</insights>
|
||||
|
||||
<<<<<<< HEAD
|
||||
def _add_note(self, name: str, content: str):
|
||||
"""Helper method to add or update a note in the database"""
|
||||
with closing(sqlite3.connect(self.db_path)) as conn:
|
||||
with closing(conn.cursor()) as cursor:
|
||||
cursor.execute(
|
||||
"INSERT OR REPLACE INTO notes (name, content) VALUES (?, ?)",
|
||||
(name, content),
|
||||
=======
|
||||
To create the memo, follow these steps:
|
||||
|
||||
1. Review all the insights carefully.
|
||||
2. Group related insights together under appropriate subheadings.
|
||||
3. Summarize each group of insights into 1-2 concise paragraphs.
|
||||
4. Ensure the memo flows logically from one point to the next.
|
||||
5. Use professional language and maintain a formal tone throughout the memo.
|
||||
|
||||
Format the memo using these guidelines:
|
||||
- Single-space the content, with a blank line between paragraphs
|
||||
- Use bullet points or numbered lists where appropriate
|
||||
- Keep the entire memo to one page if possible, two pages maximum
|
||||
|
||||
Write your final memo within <memo> tags. Ensure that all components of the memo are included and properly formatted.
|
||||
""".format(insights=insights)
|
||||
message = self.anthropic_client.messages.create(
|
||||
max_tokens=4096,
|
||||
messages=[
|
||||
{
|
||||
"role": "user",
|
||||
"content": prompt
|
||||
},
|
||||
{
|
||||
"role": "assistant",
|
||||
"content": "<memo>"
|
||||
}
|
||||
],
|
||||
model="claude-3-sonnet-20240229",
|
||||
stop_sequences=["</memo>"],
|
||||
>>>>>>> 67b071f (new SQLite server for demo and Getting started guide. Added contributing.md and pull_request_template.md)
|
||||
)
|
||||
logger.debug("Successfully received memo from Anthropic")
|
||||
return message.content[0].text.strip()
|
||||
except Exception as e:
|
||||
logger.error(f"Error generating memo with Anthropic: {e}")
|
||||
return insights
|
||||
|
||||
<<<<<<< HEAD
|
||||
def __init__(self):
|
||||
super().__init__("sqlite")
|
||||
|
||||
=======
|
||||
def _execute_query(self, query: str, params=None) -> list[dict]:
|
||||
"""Execute a SQL query and return results as a list of dictionaries"""
|
||||
logger.debug(f"Executing query: {query}")
|
||||
@@ -153,22 +70,16 @@ class McpServer(Server):
|
||||
logger.error(f"Database error executing query: {e}")
|
||||
raise
|
||||
|
||||
def __init__(self, db_path: str = "~/sqlite_mcp_server.db", anthropic_api_key: str | None = None):
|
||||
def __init__(self, db_path: str = "~/sqlite_mcp_server.db"):
|
||||
logger.info("Initializing McpServer")
|
||||
super().__init__("sqlite-manager")
|
||||
|
||||
>>>>>>> 67b071f (new SQLite server for demo and Getting started guide. Added contributing.md and pull_request_template.md)
|
||||
# Initialize SQLite database
|
||||
self.db_path = str(Path(db_path).expanduser())
|
||||
Path(self.db_path).parent.mkdir(parents=True, exist_ok=True)
|
||||
self._init_database()
|
||||
logger.debug(f"Initialized database at {self.db_path}")
|
||||
|
||||
# Initialize Anthropic API key
|
||||
self.anthropic_api_key = anthropic_api_key
|
||||
if anthropic_api_key:
|
||||
self.anthropic_client = Anthropic(api_key=anthropic_api_key)
|
||||
logger.debug("Initialized Anthropic client")
|
||||
|
||||
# Initialize insights list
|
||||
self.insights = []
|
||||
@@ -181,7 +92,7 @@ class McpServer(Server):
|
||||
logger.debug("Handling list_resources request")
|
||||
return [
|
||||
types.Resource(
|
||||
uri=AnyUrl("memo://insights"), # Changed from memo:///insights
|
||||
uri=AnyUrl("memo://insights"),
|
||||
name="Business Insights Memo",
|
||||
description="A living document of discovered business insights",
|
||||
mimeType="text/plain",
|
||||
@@ -195,7 +106,7 @@ class McpServer(Server):
|
||||
logger.error(f"Unsupported URI scheme: {uri.scheme}")
|
||||
raise ValueError(f"Unsupported URI scheme: {uri.scheme}")
|
||||
|
||||
path = str(uri).replace("memo://", "") # Changed to match new URI format
|
||||
path = str(uri).replace("memo://", "")
|
||||
if not path or path != "insights":
|
||||
logger.error(f"Unknown resource path: {path}")
|
||||
raise ValueError(f"Unknown resource path: {path}")
|
||||
@@ -225,22 +136,6 @@ class McpServer(Server):
|
||||
if name != "mcp-demo":
|
||||
logger.error(f"Unknown prompt: {name}")
|
||||
raise ValueError(f"Unknown prompt: {name}")
|
||||
<<<<<<< HEAD
|
||||
notes = (
|
||||
"<notes>\n"
|
||||
+ "\n".join(
|
||||
f"<note name='{name}'>\n{content}\n</note>"
|
||||
for name, content in self._get_notes().items()
|
||||
)
|
||||
+ "\n</notes>"
|
||||
)
|
||||
style = (arguments or {}).get("style", "simple")
|
||||
prompt = """
|
||||
Your task is to provide a summary of the notes provided below.
|
||||
{notes}
|
||||
Ensure that the summary is in {style} style.
|
||||
""".format(notes=notes, style=style)
|
||||
=======
|
||||
|
||||
if not arguments or "topic" not in arguments:
|
||||
logger.error("Missing required argument: topic")
|
||||
@@ -329,7 +224,6 @@ class McpServer(Server):
|
||||
""".format(topic=topic)
|
||||
|
||||
logger.debug(f"Generated prompt template for topic: {topic}")
|
||||
>>>>>>> 67b071f (new SQLite server for demo and Getting started guide. Added contributing.md and pull_request_template.md)
|
||||
return types.GetPromptResult(
|
||||
description=f"Demo template for {topic}",
|
||||
messages=[
|
||||
@@ -438,7 +332,7 @@ class McpServer(Server):
|
||||
memo = self._synthesize_memo()
|
||||
|
||||
# Notify clients that the memo resource has changed
|
||||
await self.request_context.session.send_resource_updated("memo://insights") # Changed from memo:///insights
|
||||
await self.request_context.session.send_resource_updated("memo://insights")
|
||||
|
||||
return [types.TextContent(type="text", text="Insight added to memo")]
|
||||
if not arguments:
|
||||
@@ -470,9 +364,9 @@ class McpServer(Server):
|
||||
except Exception as e:
|
||||
return [types.TextContent(type="text", text=f"Error: {str(e)}")]
|
||||
|
||||
async def main(db_path: str, anthropic_api_key: str | None = None):
|
||||
async def main(db_path: str):
|
||||
logger.info(f"Starting SQLite MCP Server with DB path: {db_path}")
|
||||
server = McpServer(db_path, anthropic_api_key)
|
||||
server = McpServer(db_path)
|
||||
|
||||
async with mcp.server.stdio.stdio_server() as (read_stream, write_stream):
|
||||
logger.info("Server running with stdio transport")
|
||||
@@ -485,8 +379,7 @@ async def main(db_path: str, anthropic_api_key: str | None = None):
|
||||
capabilities=server.get_capabilities(
|
||||
notification_options=NotificationOptions(),
|
||||
experimental_capabilities={
|
||||
"anthropic_api_key": {"key": anthropic_api_key}
|
||||
} if anthropic_api_key else {},
|
||||
},
|
||||
),
|
||||
),
|
||||
)
|
||||
|
||||
77
src/sqlite/uv.lock
generated
77
src/sqlite/uv.lock
generated
@@ -10,24 +10,6 @@ wheels = [
|
||||
{ url = "https://files.pythonhosted.org/packages/78/b6/6307fbef88d9b5ee7421e68d78a9f162e0da4900bc5f5793f6d3d0e34fb8/annotated_types-0.7.0-py3-none-any.whl", hash = "sha256:1f02e8b43a8fbbc3f3e0d4f0f4bfc8131bcb4eebe8849b8e5c773f3a1c582a53", size = 13643 },
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "anthropic"
|
||||
version = "0.39.0"
|
||||
source = { registry = "https://pypi.org/simple" }
|
||||
dependencies = [
|
||||
{ name = "anyio" },
|
||||
{ name = "distro" },
|
||||
{ name = "httpx" },
|
||||
{ name = "jiter" },
|
||||
{ name = "pydantic" },
|
||||
{ name = "sniffio" },
|
||||
{ name = "typing-extensions" },
|
||||
]
|
||||
sdist = { url = "https://files.pythonhosted.org/packages/79/02/2ea51930009d7537c4648f51d1bb3202ec76704cbb39a2a863ab38bee3dd/anthropic-0.39.0.tar.gz", hash = "sha256:94671cc80765f9ce693f76d63a97ee9bef4c2d6063c044e983d21a2e262f63ba", size = 189339 }
|
||||
wheels = [
|
||||
{ url = "https://files.pythonhosted.org/packages/94/61/2580eaa171cab20708d59d39cadd15f78a6c617759e8d0a12e18fe3302d1/anthropic-0.39.0-py3-none-any.whl", hash = "sha256:ea17093ae0ce0e1768b0c46501d6086b5bcd74ff39d68cd2d6396374e9de7c09", size = 198392 },
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "anyio"
|
||||
version = "4.6.2.post1"
|
||||
@@ -71,15 +53,6 @@ wheels = [
|
||||
{ url = "https://files.pythonhosted.org/packages/d1/d6/3965ed04c63042e047cb6a3e6ed1a63a35087b6a609aa3a15ed8ac56c221/colorama-0.4.6-py2.py3-none-any.whl", hash = "sha256:4f1d9991f5acc0ca119f9d443620b77f9d6b33703e51011c16baf57afb285fc6", size = 25335 },
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "distro"
|
||||
version = "1.9.0"
|
||||
source = { registry = "https://pypi.org/simple" }
|
||||
sdist = { url = "https://files.pythonhosted.org/packages/fc/f8/98eea607f65de6527f8a2e8885fc8015d3e6f5775df186e443e0964a11c3/distro-1.9.0.tar.gz", hash = "sha256:2fa77c6fd8940f116ee1d6b94a2f90b13b5ea8d019b98bc8bafdcabcdd9bdbed", size = 60722 }
|
||||
wheels = [
|
||||
{ url = "https://files.pythonhosted.org/packages/12/b3/231ffd4ab1fc9d679809f356cebee130ac7daa00d6d6f3206dd4fd137e9e/distro-1.9.0-py3-none-any.whl", hash = "sha256:7bffd925d65168f85027d8da9af6bddab658135b840670a223589bc0c8ef02b2", size = 20277 },
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "h11"
|
||||
version = "0.14.0"
|
||||
@@ -136,50 +109,6 @@ wheels = [
|
||||
{ url = "https://files.pythonhosted.org/packages/76/c6/c88e154df9c4e1a2a66ccf0005a88dfb2650c1dffb6f5ce603dfbd452ce3/idna-3.10-py3-none-any.whl", hash = "sha256:946d195a0d259cbba61165e88e65941f16e9b36ea6ddb97f00452bae8b1287d3", size = 70442 },
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "jiter"
|
||||
version = "0.7.1"
|
||||
source = { registry = "https://pypi.org/simple" }
|
||||
sdist = { url = "https://files.pythonhosted.org/packages/46/e5/50ff23c9bba2722d2f0f55ba51e57f7cbab9a4be758e6b9b263ef51e6024/jiter-0.7.1.tar.gz", hash = "sha256:448cf4f74f7363c34cdef26214da527e8eeffd88ba06d0b80b485ad0667baf5d", size = 162334 }
|
||||
wheels = [
|
||||
{ url = "https://files.pythonhosted.org/packages/26/e5/18b30b3015ae1df916cadd42b428f9a47a7277a52b041e4caf939e6c3c21/jiter-0.7.1-cp311-cp311-macosx_10_12_x86_64.whl", hash = "sha256:ad04a23a91f3d10d69d6c87a5f4471b61c2c5cd6e112e85136594a02043f462c", size = 291198 },
|
||||
{ url = "https://files.pythonhosted.org/packages/7d/e3/a70e5b98602d24c617e829d6714b3e4f7f9912fdc2844682653dafb5eba0/jiter-0.7.1-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:1e47a554de88dff701226bb5722b7f1b6bccd0b98f1748459b7e56acac2707a5", size = 303513 },
|
||||
{ url = "https://files.pythonhosted.org/packages/34/35/c44064c12e2d189dd3a6135e3b4f9f64167d81abada4eeb0dd75313ad9ad/jiter-0.7.1-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:1e44fff69c814a2e96a20b4ecee3e2365e9b15cf5fe4e00869d18396daa91dab", size = 328470 },
|
||||
{ url = "https://files.pythonhosted.org/packages/de/88/55747df3d3472a08d25ab59752cc7a2682c9bfb38d8dbe00d5fadc35ae49/jiter-0.7.1-cp311-cp311-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:df0a1d05081541b45743c965436f8b5a1048d6fd726e4a030113a2699a6046ea", size = 347484 },
|
||||
{ url = "https://files.pythonhosted.org/packages/8e/f6/afa8d156b7c166dceae66e01d0aa9933f7c3afcc5af3901e717237e5b98c/jiter-0.7.1-cp311-cp311-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:f22cf8f236a645cb6d8ffe2a64edb5d2b66fb148bf7c75eea0cb36d17014a7bc", size = 373483 },
|
||||
{ url = "https://files.pythonhosted.org/packages/b7/ab/38c652c71bfd7a8e00fc0962a6985186e9741cfd9dde00a0d8c0138a9c07/jiter-0.7.1-cp311-cp311-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:da8589f50b728ea4bf22e0632eefa125c8aa9c38ed202a5ee6ca371f05eeb3ff", size = 390563 },
|
||||
{ url = "https://files.pythonhosted.org/packages/62/02/1dacf3b95d13f36298a261723c52b45701db485ee104f7677cb931697395/jiter-0.7.1-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:f20de711224f2ca2dbb166a8d512f6ff48c9c38cc06b51f796520eb4722cc2ce", size = 325508 },
|
||||
{ url = "https://files.pythonhosted.org/packages/b9/a8/ac3509099030304b28c226b432347f5420297e8bec4cb1f27f716a4f23cf/jiter-0.7.1-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:8a9803396032117b85ec8cbf008a54590644a062fedd0425cbdb95e4b2b60479", size = 365355 },
|
||||
{ url = "https://files.pythonhosted.org/packages/92/fe/85fc2dd31473bf71b1e78311d09bb1f90211b5b327b9b884684d45e9ae48/jiter-0.7.1-cp311-cp311-musllinux_1_1_aarch64.whl", hash = "sha256:3d8bae77c82741032e9d89a4026479061aba6e646de3bf5f2fc1ae2bbd9d06e0", size = 514802 },
|
||||
{ url = "https://files.pythonhosted.org/packages/06/8c/fa1f8b98618b476c346ad57e9eb85293cd2acd7680926b2f27f884c7aebc/jiter-0.7.1-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:3dc9939e576bbc68c813fc82f6620353ed68c194c7bcf3d58dc822591ec12490", size = 497983 },
|
||||
{ url = "https://files.pythonhosted.org/packages/ee/13/0e726eaee6c5dcd14582d28e90a1381ff4ab1c6b583e597f4e0d4a0950bd/jiter-0.7.1-cp311-none-win32.whl", hash = "sha256:f7605d24cd6fab156ec89e7924578e21604feee9c4f1e9da34d8b67f63e54892", size = 198800 },
|
||||
{ url = "https://files.pythonhosted.org/packages/2b/30/6a79fd25f36660cec4fb46c5fd0d52375584fdc7a874889b24111cb666af/jiter-0.7.1-cp311-none-win_amd64.whl", hash = "sha256:f3ea649e7751a1a29ea5ecc03c4ada0a833846c59c6da75d747899f9b48b7282", size = 203785 },
|
||||
{ url = "https://files.pythonhosted.org/packages/10/b3/de89eae8f57dc0ee5f6e3aa1ffcdee0364ef9ef85be81006fd17d7710ffa/jiter-0.7.1-cp312-cp312-macosx_10_12_x86_64.whl", hash = "sha256:ad36a1155cbd92e7a084a568f7dc6023497df781adf2390c345dd77a120905ca", size = 291900 },
|
||||
{ url = "https://files.pythonhosted.org/packages/c0/ff/0d804eff4751fceeabc6311d4b07e956daa06fa58f05931887dc7454466b/jiter-0.7.1-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:7ba52e6aaed2dc5c81a3d9b5e4ab95b039c4592c66ac973879ba57c3506492bb", size = 304390 },
|
||||
{ url = "https://files.pythonhosted.org/packages/e8/26/c258bef532d113a7ac26242893fc9760040a4846dec731098b7f5ac3fca7/jiter-0.7.1-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:2b7de0b6f6728b678540c7927587e23f715284596724be203af952418acb8a2d", size = 328710 },
|
||||
{ url = "https://files.pythonhosted.org/packages/71/92/644dc215cbb9816112e28f3b43a8c8e769f083434a05fc3afd269c444f51/jiter-0.7.1-cp312-cp312-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:9463b62bd53c2fb85529c700c6a3beb2ee54fde8bef714b150601616dcb184a6", size = 347569 },
|
||||
{ url = "https://files.pythonhosted.org/packages/c6/02/795a3535262c54595bd97e375cc03b443717febb37723a7f9c077049825b/jiter-0.7.1-cp312-cp312-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:627164ec01d28af56e1f549da84caf0fe06da3880ebc7b7ee1ca15df106ae172", size = 373641 },
|
||||
{ url = "https://files.pythonhosted.org/packages/7d/35/c7e9a06a49116e3618954f6c8a26816a7959c0f9e5617b0073e4145c5d6d/jiter-0.7.1-cp312-cp312-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:25d0e5bf64e368b0aa9e0a559c3ab2f9b67e35fe7269e8a0d81f48bbd10e8963", size = 388828 },
|
||||
{ url = "https://files.pythonhosted.org/packages/fb/05/894144e4cbc1b9d46756db512268a90f84fc1d8bd28f1a17e0fef5aaf5c5/jiter-0.7.1-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:c244261306f08f8008b3087059601997016549cb8bb23cf4317a4827f07b7d74", size = 325511 },
|
||||
{ url = "https://files.pythonhosted.org/packages/19/d3/e6674ac34de53787504e4fb309084f824df321f24113121d94bf53808be3/jiter-0.7.1-cp312-cp312-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:7ded4e4b75b68b843b7cea5cd7c55f738c20e1394c68c2cb10adb655526c5f1b", size = 365940 },
|
||||
{ url = "https://files.pythonhosted.org/packages/e9/ca/c773f0ce186090cc69a2c97b8dab3dad14ae9988a657a20d879458a8407e/jiter-0.7.1-cp312-cp312-musllinux_1_1_aarch64.whl", hash = "sha256:80dae4f1889b9d09e5f4de6b58c490d9c8ce7730e35e0b8643ab62b1538f095c", size = 515430 },
|
||||
{ url = "https://files.pythonhosted.org/packages/16/5f/c98f6e6362fbc7c87ad384ba8506983fca9bb55ea0af7efcb23e7dd22817/jiter-0.7.1-cp312-cp312-musllinux_1_1_x86_64.whl", hash = "sha256:5970cf8ec943b51bce7f4b98d2e1ed3ada170c2a789e2db3cb484486591a176a", size = 497389 },
|
||||
{ url = "https://files.pythonhosted.org/packages/30/60/f60e12469afc9096bac3df0fda53de707ed5105d84322a0d1bc4ad03ee3e/jiter-0.7.1-cp312-none-win32.whl", hash = "sha256:701d90220d6ecb3125d46853c8ca8a5bc158de8c49af60fd706475a49fee157e", size = 198546 },
|
||||
{ url = "https://files.pythonhosted.org/packages/01/d2/d8ec257544f7991384a46fccee6abdc5065cfede26354bb2c86251858a92/jiter-0.7.1-cp312-none-win_amd64.whl", hash = "sha256:7824c3ecf9ecf3321c37f4e4d4411aad49c666ee5bc2a937071bdd80917e4533", size = 202792 },
|
||||
{ url = "https://files.pythonhosted.org/packages/b5/cf/00a93a9968fc21b9ecfcabb130a8c822138594ac4a00b7bff9cbb38daa7f/jiter-0.7.1-cp313-cp313-macosx_10_12_x86_64.whl", hash = "sha256:097676a37778ba3c80cb53f34abd6943ceb0848263c21bf423ae98b090f6c6ba", size = 291039 },
|
||||
{ url = "https://files.pythonhosted.org/packages/22/9a/0eb3eddffeca703f6adaaf117ba93ac3336fb323206259a86c2993cec9ad/jiter-0.7.1-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:3298af506d4271257c0a8f48668b0f47048d69351675dd8500f22420d4eec378", size = 302468 },
|
||||
{ url = "https://files.pythonhosted.org/packages/b1/95/b4da75e93752edfd6dd0df8f7723a6575e8a8bdce2e82f4458eb5564936a/jiter-0.7.1-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:12fd88cfe6067e2199964839c19bd2b422ca3fd792949b8f44bb8a4e7d21946a", size = 328401 },
|
||||
{ url = "https://files.pythonhosted.org/packages/28/af/7fa53804a2e7e309ce66822c9484fd7d4f8ef452be3937aab8a93a82c54b/jiter-0.7.1-cp313-cp313-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:dacca921efcd21939123c8ea8883a54b9fa7f6545c8019ffcf4f762985b6d0c8", size = 347237 },
|
||||
{ url = "https://files.pythonhosted.org/packages/30/0c/0b89bd3dce7d330d8ee878b0a95899b73e30cb55d2b2c41998276350d4a0/jiter-0.7.1-cp313-cp313-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:de3674a5fe1f6713a746d25ad9c32cd32fadc824e64b9d6159b3b34fd9134143", size = 373558 },
|
||||
{ url = "https://files.pythonhosted.org/packages/24/96/c75633b99d57dd8b8457f88f51201805c93b314e369fba69829d726bc2a5/jiter-0.7.1-cp313-cp313-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:65df9dbae6d67e0788a05b4bad5706ad40f6f911e0137eb416b9eead6ba6f044", size = 388251 },
|
||||
{ url = "https://files.pythonhosted.org/packages/64/39/369e6ff198003f55acfcdb58169c774473082d3303cddcd24334af534c4e/jiter-0.7.1-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:7ba9a358d59a0a55cccaa4957e6ae10b1a25ffdabda863c0343c51817610501d", size = 325020 },
|
||||
{ url = "https://files.pythonhosted.org/packages/80/26/0c386fa233a78997db5fa7b362e6f35a37d2656d09e521b0600f29933992/jiter-0.7.1-cp313-cp313-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:576eb0f0c6207e9ede2b11ec01d9c2182973986514f9c60bc3b3b5d5798c8f50", size = 365211 },
|
||||
{ url = "https://files.pythonhosted.org/packages/21/4e/bfebe799924a39f181874b5e9041b792ee67768a8b160814e016a7c9a40d/jiter-0.7.1-cp313-cp313-musllinux_1_1_aarch64.whl", hash = "sha256:e550e29cdf3577d2c970a18f3959e6b8646fd60ef1b0507e5947dc73703b5627", size = 514904 },
|
||||
{ url = "https://files.pythonhosted.org/packages/a7/81/b3c72c6691acd29cf707df1a0b300e6726385b3c1ced8dc20424c4452699/jiter-0.7.1-cp313-cp313-musllinux_1_1_x86_64.whl", hash = "sha256:81d968dbf3ce0db2e0e4dec6b0a0d5d94f846ee84caf779b07cab49f5325ae43", size = 497102 },
|
||||
{ url = "https://files.pythonhosted.org/packages/1e/c3/766f9ec97df0441597878c7949da2b241a12a381c3affa7ca761734c8c74/jiter-0.7.1-cp313-none-win32.whl", hash = "sha256:f892e547e6e79a1506eb571a676cf2f480a4533675f834e9ae98de84f9b941ac", size = 198119 },
|
||||
{ url = "https://files.pythonhosted.org/packages/76/01/cbc0136784a3ffefb5ca5326f8167780c5c3de0c81b6b81b773a973c571e/jiter-0.7.1-cp313-none-win_amd64.whl", hash = "sha256:0302f0940b1455b2a7fb0409b8d5b31183db70d2b07fd177906d83bf941385d1", size = 199236 },
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "mcp"
|
||||
version = "0.9.1"
|
||||
@@ -278,15 +207,11 @@ name = "sqlite"
|
||||
version = "0.1.0"
|
||||
source = { editable = "." }
|
||||
dependencies = [
|
||||
{ name = "anthropic" },
|
||||
{ name = "mcp" },
|
||||
]
|
||||
|
||||
[package.metadata]
|
||||
requires-dist = [
|
||||
{ name = "anthropic", specifier = ">=0.39.0" },
|
||||
{ name = "mcp", specifier = ">=0.9.1" },
|
||||
]
|
||||
requires-dist = [{ name = "mcp", specifier = ">=0.9.1" }]
|
||||
|
||||
[[package]]
|
||||
name = "sse-starlette"
|
||||
|
||||
Reference in New Issue
Block a user