Skip to content

Commit

Permalink
Updated README, CONTRIBUTING, and PR Template
Browse files Browse the repository at this point in the history
  • Loading branch information
GarvanD committed Nov 21, 2024
1 parent 9ed4133 commit 145f123
Show file tree
Hide file tree
Showing 5 changed files with 207 additions and 544 deletions.
90 changes: 52 additions & 38 deletions src/sqlite/README.md
Original file line number Diff line number Diff line change
@@ -1,48 +1,62 @@
# SQLite MCP Server
# Simple SQLite Notes Server

## Overview
A Model Context Protocol (MCP) server implementation that provides database interaction and business intelligence capabilities through SQLite. This server enables running SQL queries, analyzing business data, and automatically generating business insight memos that can be enhanced with Claude's analysis when an Anthropic API key is provided.
A basic MCP server implementation that demonstrates note-taking functionality using the three core MCP primitives: Resources, Prompts, and Tools.

## Components
## Core Concepts

### Resources
The server exposes a single dynamic resource:
- `memo://insights`: A continuously updated business insights memo that aggregates discovered insights during analysis
- Auto-updates as new insights are discovered via the append-insight tool
- Optional enhancement through Claude for professional formatting (requires Anthropic API key)
Resources are how clients access data from the server. In this case, they're notes stored in SQLite.

```python
# Access notes through a custom URI scheme
note:///example_note # Gets the content of 'example_note'
```

### Prompts
The server provides a demonstration prompt:
- `mcp-demo`: Interactive prompt that guides users through database operations
- Required argument: `topic` - The business domain to analyze
- Generates appropriate database schemas and sample data
- Guides users through analysis and insight generation
- Integrates with the business insights memo
Prompts allow generating text based on server state. Our server has a note summarization prompt that can be styled.

```python
# Example prompt with style argument
{
"name": "summarize-notes",
"arguments": {
"style": "academic" # Can be any style descriptor
}
}
```

### Tools
The server offers six core tools:

#### Query Tools
- `read-query`: Execute SELECT queries on the database
- `write-query`: Execute INSERT, UPDATE, or DELETE queries
- `create-table`: Create new database tables

#### Schema Tools
- `list-tables`: Get a list of all tables in the database
- `describe-table`: View the schema of a specific table

#### Analysis Tools
- `append-insight`: Add new business insights to the memo resource

## Installation

```bash
# Required: Python 3.10+
python -m pip install mcp-sqlite-server

# Run with default settings
mcp-sqlite-server
Tools modify server state. We have a simple tool to add new notes.

```python
# Adding a new note
{
"name": "add-note",
"arguments": {
"name": "my_note",
"content": "This is my note content"
}
}
```

# Run with custom database and Anthropic integration
mcp-sqlite-server --db-path ~/analysis.db --anthropic-key sk-xxx
## Key Implementation Details

### Handler Registration
All decorated handlers must be inside `__init__`:
```python
def __init__(self):
super().__init__("sqlite")

@self.list_resources()
async def handle_list_resources():
# Handler code here

@self.read_resource()
async def handle_read_resource():
# Handler code here
```

### Storage
- Uses SQLite for persistent storage
- Helper methods handle database operations
- Clients are notified of state changes
3 changes: 1 addition & 2 deletions src/sqlite/pyproject.toml
Original file line number Diff line number Diff line change
Expand Up @@ -5,8 +5,7 @@ description = "A simple SQLite MCP server"
readme = "README.md"
requires-python = ">=3.11"
dependencies = [
"mcp>=0.9.1",
"anthropic>=0.39.0",
"mcp>=0.9.0",
]

[build-system]
Expand Down
13 changes: 1 addition & 12 deletions src/sqlite/src/sqlite/__init__.py
Original file line number Diff line number Diff line change
@@ -1,21 +1,10 @@
from . import server
import asyncio
import argparse
import os


def main():
"""Main entry point for the package."""
parser = argparse.ArgumentParser(description='SQLite MCP Server')
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())


# Optionally expose other important items at package level
Expand Down
Loading

0 comments on commit 145f123

Please sign in to comment.