Full Text Search MCP
A full-text search server using Tantivy that can be used as both an MCP (Model Context Protocol) server and a Python library.
Installation
pip install -e .
Usage
Combined FastAPI + MCP Server (one process)
fts-mcp-plus-api --config example_config.yaml
# MCP served at /mcp, REST API at the root paths (e.g., /search, /fetch)
As an MCP Server (CLI)
python -m full_text_search.mcp \
--data-file data.jsonl \
--id-column id \
--text-column content \
--searchable-columns title content tags \
--description "My document search index" \
--host 0.0.0.0 \
--port 8000
As a Python Library
The FullTextSearchMCP class can be imported and used programmatically:
from full_text_search.mcp import FullTextSearchMCP
# Create and initialize the search server
server = FullTextSearchMCP()
server.initialize(
data_file="data.jsonl",
id_column="id",
text_column="content",
searchable_columns=["title", "content", "tags"],
description="My search index"
)
# Use search functionality directly
results = server.search("python programming", limit=10)
print(results)
# Retrieve specific documents
docs = server.read_documents(["doc1", "doc2"])
print(docs)
# Or run as MCP server programmatically
server.run_server(host="localhost", port=8080)
Creating an MCP Server Instance
You can also create a FastMCP server instance for integration with other applications:
from full_text_search.mcp import FullTextSearchMCP
server = FullTextSearchMCP()
server.initialize(
data_file="data.jsonl",
id_column="id",
text_column="content",
searchable_columns=["title", "content"],
description="My search index"
)
# Get the FastMCP server instance
mcp_server = server.create_mcp_server()
# Use mcp_server with your preferred transport
Data Format
The input data should be in JSONL format (one JSON object per line):
{"id": "1", "title": "Python Basics", "content": "Introduction to Python programming..."}
{"id": "2", "title": "Advanced Python", "content": "Advanced concepts in Python..."}
Features
- Full-text search using Tantivy search engine
- Modular design - can be used as a library or standalone server
- No global state - all functionality encapsulated in the
FullTextSearchMCPclass - MCP protocol support for integration with AI assistants
- Flexible column mapping - specify which columns to search and how to identify documents
- Document retrieval by ID for full content access
API Methods
FullTextSearchMCP.initialize()
Initialize the search index with your data.
Parameters:
data_file: Path to JSONL file containing documentsid_column: Name of column containing unique document IDstext_column: Name of main text column for contentsearchable_columns: List of column names to make searchabledescription: Description of what this search index containsindex_path: Optional path for index storage (defaults to{data_file}_index)
FullTextSearchMCP.search(query, limit=5)
Search documents and return previews.
Parameters:
query: Search query stringlimit: Maximum number of results to return
Returns: Formatted string with search results and previews
FullTextSearchMCP.read_documents(document_ids)
Retrieve full content for specific document IDs.
Parameters:
document_ids: List of document IDs to retrieve
Returns: Formatted string with full document content
FullTextSearchMCP.create_mcp_server()
Create a FastMCP server instance with search tools.
Returns: FastMCP server instance
FullTextSearchMCP.run_server(host="0.0.0.0", port=8000)
Run the MCP server.
Parameters:
host: Host address for the serverport: Port number for the server
Metadata
Release files for fts-mcp 0.0.14
For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.
Source distribution (sdist)
| File | Size | Uploaded | |
|---|---|---|---|
| fts_mcp-0.0.14.tar.gz | 80.4 kB | Details |
Built distribution (wheel)
| File | Interpreter | ABI | Platform | Reset |
|---|---|---|---|---|
| fts_mcp-0.0.14-py3-none-any.whl | Python 3 | none | any | Details |
Total release size: 177.3 kB
Release files / fts_mcp-0.0.14.tar.gz
| Download URL | fts_mcp-0.0.14.tar.gz |
|---|---|
| Size | 80.4 kB |
| Tags | Source |
|
SHA-256 checksum How to use checksums |
438f29363b049b02055a9330e27baa824079380aee63b7699a8398f886467496
|
|
BLAKE2b-256 checksum How to use checksums |
25ce5f2524ee0f0ae9b2d6ad67364337d2056de0ca2c0eace77b7d70d40688bb
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
twine/6.2.0 CPython/3.13.0
|
Release files / fts_mcp-0.0.14-py3-none-any.whl
| Download URL | fts_mcp-0.0.14-py3-none-any.whl |
|---|---|
| Size | 96.9 kB |
| Tags | Python 3 |
|
SHA-256 checksum How to use checksums |
98a274bce62ed18ec00fea414787f35e841711b9580c7a1c60f5883f0fe836b7
|
|
BLAKE2b-256 checksum How to use checksums |
d1b35331cd00af54bbeee10c422ef7ae630c5e8d9e41e674b07c23504eb40f79
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
twine/6.2.0 CPython/3.13.0
|