Skip to main content

MCP server for versioned document retrieval, metadata access, and diff capabilities

Project description

Folios

Folios Logo

PyPI version Tests codecov Python 3.10+ License: MIT Docs

A lightweight Model Context Protocol (MCP) server for querying your local library of documents.

Example

Documentation

What problem solves folios?

When working in engineering applications, AI agents often need access to a variety of internal documents such as design practices, guidelines, and specifications that are stored in a local, document-based knowledge management system. While Retreival Augmented Generation (RAG) implementation can provide such functionality, setting it up and maintaining it up to date can be complex and time-consuming. Why not accessing the documents directly? If the master information is stored in documents, Agentic AI is not going to change the quality processes that are already in place to manage knowledge in companies, so I believe in giving agents read-only access to the document library is a more straightforward approach. However, giving agent access to those system repositories con be challenging due to the restricted nature of their APIs or the lack of privileged access.

If you are developing agentic workflows, in order to mock the functionality to give agents the access to such complex management systems, Folios provides a simple MCP server that can be pointed to a folder of properly formatted Markdown files. This allows AI assistants to perform the same query behaviour with a very low setup cost from the user/developer side.

Features

  • Zero Config - Just point to a folder of Markdown files and go
  • Local First - Your documents stay on your machine or network, no cloud dependencies
  • Flexible Metadata - Use any frontmatter fields your workflow needs
  • Versioned Documents - Store multiple versions with simple {id}_v{version}.md naming

One-liner to install, run and configure

uvx folios --path /path/to/your/documents

Quick guide to get started

1. Create your documents folder

Any normal local folder will do. Documents follow the naming convention {id}_v{version}.md:

documents/
├── 123456_v1.md
├── 123456_v2.md
└── 789012_v1.md

2. Add YAML frontmatter to each document

Frontmatter is flexible - include any fields your workflow requires:

---
author: "J. Smith"
date: "2025-01-15"
document_type: "Design Practice"
status: "Approved"
reviewer: "A. Johnson"
---

# Stress Analysis Design Practice

Lorem ipsum dolor sit amet, consectetur adipiscing elit.

## Background

More text here...

Only the --- delimiters and an H1 title are required. Missing fields show "NA" in responses.

3. Run the server

you can run folios directly with one terminal command

uvx folios --path /path/to/your/documents

alternatively, you can add it to your LLM Client MCP configuration:

{
  "mcpServers": {
    "folios": {
      "command": "uvx",
      "args": ["folios", "--path", "/path/to/your/documents"],
      }
    }
  }

We have tested it with Claude Desktop and the GitHub Copilot Extension for VS Code, but it should work with any MCP-compatible client.

MCP Tools

Tool Parameters Description
get_document_content document_id, version? Retrieve document content (latest if version omitted)
get_document_metadata document_id, version? Get metadata including auto-parsed chapters
diff_document_versions document_id, from_version, to_version Diff between two versions
list_documents status?, document_type?, author? List documents with optional filters
list_document_versions document_id List all versions of a document

Document Schema

Core Metadata Fields

These fields are always present in metadata responses:

Field Type Description
id int Unique document identifier (from filename)
version int Version number (from filename)
title str Document title (from H1 heading)
author str Document author ("NA" if not in frontmatter)
date str Publication date ("NA" if not in frontmatter)
chapters list Auto-parsed from H2 headings

Dynamic Fields

Any additional frontmatter fields are included in metadata responses. Common examples:

  • document_type - Document type (Design Practice, Guideline, etc.)
  • status - Document status (Draft, Approved, etc.)
  • reviewer, approver - Approval workflow fields
  • Custom fields for your specific workflow

Configuration

Documents Path

Provide the documents folder path via CLI flag or environment variable:

Option Description
--path Path to documents folder (CLI flag)
FOLIOS_PATH Path to documents folder (environment variable)

Field Configuration (Optional)

Create a folios.toml in your documents folder to define allowed values for fields:

[fields.status]
values = ["Draft", "In Review", "Approved", "Withdrawn"]

[fields.document_type]
values = ["Design Practice", "Guideline", "Best Practice", "TRS"]

[fields.department]
values = ["Engineering", "Manufacturing", "HR"]

This helps agents understand what values are valid for each field.

Development

git clone https://github.com/alex-pradas/folios
cd folios
uv sync

# Run locally
FOLIOS_PATH=./examples/documents uv run folios

# Run tests
uv run pytest

License

This project is licensed under the terms of the MIT license.

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

folios-0.5.1.tar.gz (348.4 kB view details)

Uploaded Source

Built Distribution

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

folios-0.5.1-py3-none-any.whl (12.2 kB view details)

Uploaded Python 3

File details

Details for the file folios-0.5.1.tar.gz.

File metadata

  • Download URL: folios-0.5.1.tar.gz
  • Upload date:
  • Size: 348.4 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/6.1.0 CPython/3.13.7

File hashes

Hashes for folios-0.5.1.tar.gz
Algorithm Hash digest
SHA256 c94c0e87fdb5ae64d5a2768a4afbc6c14fcf12cc74b2d3559b45d6f07a4094c6
MD5 4ada3b35c563bd399e615bd157bd11bc
BLAKE2b-256 25e89bf6143caf4e5bc197c110d8fda07b44d8420e0ad4495e4ea9d86dbcdcd1

See more details on using hashes here.

Provenance

The following attestation bundles were made for folios-0.5.1.tar.gz:

Publisher: publish.yml on alex-pradas/folios

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file folios-0.5.1-py3-none-any.whl.

File metadata

  • Download URL: folios-0.5.1-py3-none-any.whl
  • Upload date:
  • Size: 12.2 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/6.1.0 CPython/3.13.7

File hashes

Hashes for folios-0.5.1-py3-none-any.whl
Algorithm Hash digest
SHA256 7618517752b8652e009fbf875749b71d5f6dbfc92f2a0c5473fcffc4459a3568
MD5 1d216e757f401935a19986a34439ce8a
BLAKE2b-256 d835f66e817e6e35c12f1261ccc584cc75951d7f3a989d5189b202da19afe535

See more details on using hashes here.

Provenance

The following attestation bundles were made for folios-0.5.1-py3-none-any.whl:

Publisher: publish.yml on alex-pradas/folios

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

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