Skip to main content

MCP server for document search with RAG capabilities using ChromaDB

Project description

Standardizing LLM Interaction with MCP Servers

Model Context Protocol, or MCP, is an open protocol that standardizes how applications provide context to LLMs. In other words it provides a unified framework for LLM based applications to connect to connect to data sources, get context, use tools, and execute standard prompts.

The MCP ecosystem outlines three specific components:

  • MCP Servers handle: tool availability (exposing what functions are available), tool execution (running those functions when requested), static content as resources (providing data that can be referenced), preset prompts (standardized templates for common tasks)

  • Clients manage: Connections to servers, LLM integration, message passing between components

  • Hosts provide: Frontend interfaces, surfacing of MCP functionality to users, integration points for the overall ecosystem

This architecture creates a modular system where different components can be developed independently while maintaining interoperability. This let's users make MCP servers for different LLM related functionalities then plug and play across a variety of supported applications. Commonly used to integrate services APIs and tools, or connect to local datasources on your own machine.

MCP Server Components

MCP servers form the foundation of the protocol by exposing standardized capabilities through well-defined interfaces. Hosts and clients can then connect to these servers using the protocol standard, but how these capabilities are presented to users remains flexible and open to developers. That means that the actual implementation and user experience is entirely up to the developer - whether through command line interfaces, graphical applications, or embedded within larger systems.

In this guide, we'll focus on building an example MCP server with core capabilities, along with a simple client implementation to demonstrate the interaction patterns. To start, let's go over the main components of an MCP Server:

Tools

Tools are functions that the LLM can invoke to perform actions or retrieve information. Each tool is defined with:

{
  name: string;          // Unique identifier for the tool
  description?: string;  // Human-readable description
  inputSchema: {         // JSON Schema for the tool's parameters
    type: "object",
    properties: { ... }  // Tool-specific parameters
  }
}

Tools allow LLMs to interact with external systems, execute code, query databases, or perform calculations. They represent actions that have effects or compute new information.

Resources

Resources represent data sources that can be accessed by the client application. They are identified by URIs and can include:

{
  uri: string;           // Unique identifier for the resource
  name: string;          // Human-readable name
  description?: string;  // Optional description
  mimeType?: string;     // Optional MIME type
}

Resources can be static (like configuration files) or dynamic (like database records or API responses). They provide context to the LLM without requiring function calls.

Prompts

Prompts are reusable templates that define specific interaction patterns. They allow servers to expose standardized conversation flows:

{
  name: string;              // Unique identifier for the prompt
  description?: string;      // Human-readable description
  arguments?: [              // Optional list of arguments
    {
      name: string;          // Argument identifier
      description?: string;  // Argument description
      required?: boolean;    // Whether argument is required
    }
  ]
}

Prompts help create consistent, purpose-built interactions for common tasks, allowing users to invoke them through UI elements like slash commands.

Note: While tools are designed specifically for LLM interaction (similar to function calling), prompts and resources serve different purposes in the MCP ecosystem. Prompts are typically user-controlled templates that can be invoked directly through UI elements like slash commands, and resources are application-controlled data sources that may be presented to users for selection before being included in the LLM context.

More details and additional functionality can be found in the MCP Official Documentation


Setting Up Our Example

Our MCP Server will highlight tools, resources, and prompts. The core concept is to create a simple knowledgebase chatbot flow that will be have the functionality to:

  1. Let the LLM use tools to query a vector database for RAG responses
  2. Let the user choose existing resources to provide context
  3. Let the user execute standard prompts for more complex analytical workflows

The above diagram is what's implemented in mcp_server.py with a corresponding simple CLI client in client.py.

As a useful resource, check out MCP's Server List for official integrations and community-made servers.


Setup and Installation

  1. Clone the Repo
git clone https://github.com/ALucek/quick-mcp-example.git
cd quick-mcp-example
  1. Create the ChromaDB Database

Follow the instructions in MCP_setup.ipynb to create the vector database and embed a pdf into it.

  1. Create the Virtual Environment and Install Packages
# Using uv (recommended)
uv venv
source .venv/bin/activate  # On macOS/Linux
# OR
.venv\Scripts\activate     # On Windows

# Install dependencies
uv sync
  1. Run the Client & Server
python client.py mcp_server.py

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

iflow_mcp_alucek_simple_mcp_examples-0.1.0.tar.gz (16.3 kB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

File details

Details for the file iflow_mcp_alucek_simple_mcp_examples-0.1.0.tar.gz.

File metadata

  • Download URL: iflow_mcp_alucek_simple_mcp_examples-0.1.0.tar.gz
  • Upload date:
  • Size: 16.3 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: uv/0.10.0 {"installer":{"name":"uv","version":"0.10.0","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":{"name":"Debian GNU/Linux","version":"13","id":"trixie","libc":null},"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":null}

File hashes

Hashes for iflow_mcp_alucek_simple_mcp_examples-0.1.0.tar.gz
Algorithm Hash digest
SHA256 844f697f9a82bee2fbf0dd9fc81c83fb8f9577b52c678920ccb3e1f72d9a1940
MD5 7447c40219e31f333d5085ac2eb10443
BLAKE2b-256 b85082a919c6b2c6bf3a0af3406c49270aa43d469c157e086f20bd68734a3cc4

See more details on using hashes here.

File details

Details for the file iflow_mcp_alucek_simple_mcp_examples-0.1.0-py3-none-any.whl.

File metadata

  • Download URL: iflow_mcp_alucek_simple_mcp_examples-0.1.0-py3-none-any.whl
  • Upload date:
  • Size: 14.7 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? No
  • Uploaded via: uv/0.10.0 {"installer":{"name":"uv","version":"0.10.0","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":{"name":"Debian GNU/Linux","version":"13","id":"trixie","libc":null},"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":null}

File hashes

Hashes for iflow_mcp_alucek_simple_mcp_examples-0.1.0-py3-none-any.whl
Algorithm Hash digest
SHA256 286860ca282301736729e829d07694bb8418534b13b460ca6ac555bbeb16bc2f
MD5 febf0c05cd6fcfc0cd00efe72382f42c
BLAKE2b-256 ec380c51dcb8cfc5439a8a0f896e27ee8cc26dca48c38aca624e524c103c1b3f

See more details on using hashes here.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page