| | import sqlite3 |
| | import argparse |
| | from mcp.server.fastmcp import FastMCP |
| |
|
| | mcp = FastMCP('sqlite-demo') |
| |
|
| | def init_db(): |
| | conn = sqlite3.connect('demo.db') |
| | cursor = conn.cursor() |
| | cursor.execute(''' |
| | CREATE TABLE IF NOT EXISTS people ( |
| | id INTEGER PRIMARY KEY AUTOINCREMENT, |
| | name TEXT NOT NULL, |
| | age INTEGER NOT NULL, |
| | profession TEXT NOT NULL |
| | ) |
| | ''') |
| | conn.commit() |
| | return conn, cursor |
| |
|
| | @mcp.tool() |
| | def add_data(query: str) -> bool: |
| | """Add new data to the people table using a SQL INSERT query. |
| | |
| | Args: |
| | query (str): SQL INSERT query following this format: |
| | INSERT INTO people (name, age, profession) |
| | VALUES ('John Doe', 30, 'Engineer') |
| | |
| | Schema: |
| | - name: Text field (required) |
| | - age: Integer field (required) |
| | - profession: Text field (required) |
| | Note: 'id' field is auto-generated |
| | |
| | Returns: |
| | bool: True if data was added successfully, False otherwise |
| | |
| | Example: |
| | >>> query = ''' |
| | ... INSERT INTO people (name, age, profession) |
| | ... VALUES ('Alice Smith', 25, 'Developer') |
| | ... ''' |
| | >>> add_data(query) |
| | True |
| | """ |
| | conn, cursor = init_db() |
| | try: |
| | cursor.execute(query) |
| | conn.commit() |
| | return True |
| | except sqlite3.Error as e: |
| | print(f"Error adding data: {e}") |
| | return False |
| | finally: |
| | conn.close() |
| |
|
| | @mcp.tool() |
| | def read_data(query: str = "SELECT * FROM people") -> list: |
| | """Read data from the people table using a SQL SELECT query. |
| | |
| | Args: |
| | query (str, optional): SQL SELECT query. Defaults to "SELECT * FROM people". |
| | Examples: |
| | - "SELECT * FROM people" |
| | - "SELECT name, age FROM people WHERE age > 25" |
| | - "SELECT * FROM people ORDER BY age DESC" |
| | |
| | Returns: |
| | list: List of tuples containing the query results. |
| | For default query, tuple format is (id, name, age, profession) |
| | |
| | Example: |
| | >>> # Read all records |
| | >>> read_data() |
| | [(1, 'John Doe', 30, 'Engineer'), (2, 'Alice Smith', 25, 'Developer')] |
| | |
| | >>> # Read with custom query |
| | >>> read_data("SELECT name, profession FROM people WHERE age < 30") |
| | [('Alice Smith', 'Developer')] |
| | """ |
| | conn, cursor = init_db() |
| | try: |
| | cursor.execute(query) |
| | return cursor.fetchall() |
| | except sqlite3.Error as e: |
| | print(f"Error reading data: {e}") |
| | return [] |
| | finally: |
| | conn.close() |
| |
|
| |
|
| |
|
| | if __name__ == "__main__": |
| | |
| | print("🚀Starting server... ") |
| |
|
| | |
| | |
| |
|
| | |
| | |
| |
|
| | parser = argparse.ArgumentParser() |
| | parser.add_argument( |
| | "--server_type", type=str, default="sse", choices=["sse", "stdio"] |
| | ) |
| |
|
| | args = parser.parse_args() |
| | mcp.run(args.server_type) |
| |
|
| |
|
| |
|
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| |
|