Chinookdb Server
FreeNot checkedMCP server providing LLMs with safe, read-only access to the Chinook SQLite sample database, including schema exploration and SQL query execution.
About
MCP server providing LLMs with safe, read-only access to the Chinook SQLite sample database, including schema exploration and SQL query execution.
README
Example MCP Server to provide LLM MCP access to the example sqlite3 Chinook database
Overview
This project provides an MCP (Model Context Protocol) server for the Chinook SQLite database and a sample Agno agent client for interactive querying. It enables LLMs and other MCP-compatible clients to safely explore and query the Chinook database using a standardized protocol.
Key Features
- Automatic Database Download:
- Downloads and extracts the Chinook SQLite database if not present.
- Resource Endpoints:
schema://chinook/tables: Returns the schema for all tables in the database.schema://chinook/table/{table_name}: Returns the schema for a specific table.
- SQL Query Tool:
run_sql_query: Allows execution of read-only (SELECT) SQL queries. Only SELECT statements are permitted for safety.
- Prompt Templates:
- Provides prompt templates for common tasks, such as listing tables, showing table schemas, counting rows, and querying top artists.
- Safe SQL Identifier Escaping:
- Includes a local function to safely escape SQL identifiers for SQLite.
- Agno Agent Integration:
- Includes a sample client (
agno_test_client.py) that demonstrates how to connect to the MCP server and interact with it using an LLM agent.
- Includes a sample client (
How to Get Started
1. Installation
- Clone the repository:
curl -LsSf https://astral.sh/uv/install.sh | sh git clone <your-repo-url> cd mcp-chinookdb-server - Install Python dependencies using uv:
Ensure you have Python 3.8+ installed and uv available in your environment.uv sync
2. Running the MCP Server
- Start the server:
The server will automatically download the Chinook database if needed and start listening for MCP requests (default: stdio transport).uv run chinook_mcp_server.py
3. Using the Agno Test Client
Start the interactive client:
uv run agno_test_client.pyThis will launch a REPL where you can type natural language queries about the Chinook database. The client will start the MCP server (if not already running) and use an LLM (e.g., OpenAI GPT-4) to interpret your queries and interact with the database via MCP tools.
Example queries:
List all tables.Show the schema for the Album table.How many tracks are there in the database?Who are the top 5 artists by number of tracks?
To exit: Type
q,quit, orexitat the prompt.
How the Programs Work
chinook_mcp_server.py
- Implements an MCP server that exposes the Chinook database via resource endpoints, tools, and prompt templates.
- Handles automatic download and extraction of the database.
- Provides safe, read-only access to schema and data.
- Designed to be used by LLMs or any MCP-compatible client.
agno_test_client.py
- Demonstrates how to connect to the MCP server using the Agno agent framework.
- Starts the MCP server as a subprocess (using
uv run chinook_mcp_server.pyfor fast startup). - Uses an LLM (e.g., OpenAI GPT-4) to interpret user queries and call MCP tools/resources.
- Provides a simple REPL for interactive exploration.
Security Notes
- Only SELECT queries are allowed via the
run_sql_querytool. - SQL identifiers are safely escaped to prevent injection.
Customization
- You can add more MCP resources, tools, or prompts by following the patterns in
chinook_mcp_server.py. - The client can be extended to use different LLMs or provide more advanced conversational features.
References
Chinook Database Overview
The Chinook SQLite database is a sample database that models a digital music store, similar to iTunes. It is widely used for SQL learning and demonstrations. The schema is designed to represent the core entities and relationships found in an online music store, including customers, employees, artists, albums, tracks, invoices, and more.
Concept Overview
- Artists release albums.
- Albums contain multiple tracks (songs or audio files).
- Tracks are categorized by genre and media type.
- Customers purchase tracks via invoices.
- Employees represent staff, including sales support.
- Invoice lines detail each track purchased in an invoice.
- Playlists allow grouping of tracks for listening.
Main Tables and Columns
Artist
ArtistId(INTEGER, PK): Unique artist identifierName(NVARCHAR): Artist name
Album
AlbumId(INTEGER, PK): Unique album identifierTitle(NVARCHAR): Album titleArtistId(INTEGER, FK): Reference to the artist
Track
TrackId(INTEGER, PK): Unique track identifierName(NVARCHAR): Track nameAlbumId(INTEGER, FK): Reference to the albumMediaTypeId(INTEGER, FK): Reference to the media typeGenreId(INTEGER, FK): Reference to the genreComposer(NVARCHAR): Composer nameMilliseconds(INTEGER): Track lengthBytes(INTEGER): File sizeUnitPrice(NUMERIC): Price per track
Genre
GenreId(INTEGER, PK): Unique genre identifierName(NVARCHAR): Genre name
MediaType
MediaTypeId(INTEGER, PK): Unique media type identifierName(NVARCHAR): Media type name (e.g., MPEG audio, AAC audio)
Customer
CustomerId(INTEGER, PK): Unique customer identifierFirstName,LastName(NVARCHAR): Customer nameCompany,Address,City,State,Country,PostalCode(NVARCHAR): Contact infoPhone,Fax,Email(NVARCHAR): Contact infoSupportRepId(INTEGER, FK): Employee assigned to the customer
Employee
EmployeeId(INTEGER, PK): Unique employee identifierLastName,FirstName(NVARCHAR): Employee nameTitle(NVARCHAR): Job titleReportsTo(INTEGER, FK): ManagerBirthDate,HireDate(DATETIME): DatesAddress,City,State,Country,PostalCode,Phone,Fax,Email(NVARCHAR): Contact info
Invoice
InvoiceId(INTEGER, PK): Unique invoice identifierCustomerId(INTEGER, FK): Customer making the purchaseInvoiceDate(DATETIME): Date of invoiceBillingAddress,BillingCity,BillingState,BillingCountry,BillingPostalCode(NVARCHAR): Billing infoTotal(NUMERIC): Total amount
InvoiceLine
InvoiceLineId(INTEGER, PK): Unique line item identifierInvoiceId(INTEGER, FK): Reference to invoiceTrackId(INTEGER, FK): Reference to trackUnitPrice(NUMERIC): Price per trackQuantity(INTEGER): Number of tracks purchased
Playlist
PlaylistId(INTEGER, PK): Unique playlist identifierName(NVARCHAR): Playlist name
PlaylistTrack
PlaylistId(INTEGER, FK): Reference to playlistTrackId(INTEGER, FK): Reference to track
This schema enables a wide range of queries and analytics, such as finding top artists, most popular genres, customer purchase history, and more.
Installing Chinookdb Server
This server has no published package — it is built from source. Open the repository and follow its README.
▸ github.com/andrewwgordon/mcp-chinookdb-serverFAQ
Is Chinookdb Server MCP free?
Yes, Chinookdb Server MCP is free — one-click install via Unyly at no cost.
Does Chinookdb Server need an API key?
No, Chinookdb Server runs without API keys or environment variables.
Is Chinookdb Server hosted or self-hosted?
Self-hosted: the server runs locally on your machine via the install command above.
How do I install Chinookdb Server in Claude Desktop, Claude Code or Cursor?
Open Chinookdb Server on unyly.org, pick your client tab (Claude Desktop, Claude Code, Cursor) and press Install — the config is generated automatically, no JSON editing.
Related MCPs
wenb1n-dev/SmartDB_MCP
A universal database MCP server supporting simultaneous connections to multiple databases. It provides tools for database operations, health analysis, SQL optim
by wenb1n-devPostgres Server
This server enables interaction with PostgreSQL databases through the Model Context Protocol, optimized for the AWS Bedrock AgentCore Runtime. It provides tools
by madhurprashPostgres
Query your database in natural language
by AnthropicPostgreSQL
Read-only database access with schema inspection.
by modelcontextprotocolCompare Chinookdb Server with
Not sure what to pick?
Find your stack in 60 seconds
Author?
Embed badge for your README
Browse similar
All data MCPs
