An MCP server that enables VS Code to view and analyze PDF documents using the Model Context Protocol (MCP).
This project was created using the Model Context Protocol Python SDK based on FastMCP.
- Open and read PDF documents
- Extract text from PDFs (whole document or specific pages)
- View PDF metadata
- Generate summaries of PDF content
- Extract text from specific pages or page ranges
- Analyze PDF content and answer questions about it
- Ensure you have Python 3.13+ installed
- Clone this repository
- Create a virtual environment:
uv venv .venv
source .venv/bin/activate- Install dependencies:
uv pip install -e .You can also run this MCP server using Docker:
docker build -t pdf-reader-mcp .docker run --name pdf-reader-mcp -it pdf-reader-mcpWhen using Docker, update your MCP configuration to use the Docker container:
{
"servers": {
"pdf-reader": {
"type": "stdio",
"command": "docker",
"args": [
"run",
"--rm",
"-i",
"pdf-reader-mcp"
]
}
}
}{
"mcpServers": {
"pdf-reader-mcp": {
"command": "docker",
"args": [
"run",
"--rm",
"-i",
"pdf-reader-mcp"
]
}
}
}This MCP server integrates with VS Code's MCP client to provide PDF reading capabilities. See the Tools and Prompts section below for details on available functionality.
This image shows the PDF Reader tools available in VS Code through the MCP protocol:
Here's an example of using the PDF Reader to analyze a document:
The server is configured to run in VS Code through the .vscode/mcp.json file. VS Code must have the MCP extension installed to use this server.
To install the VS Code MCP extension:
- Open VS Code
- Go to Extensions (Ctrl+Shift+X or Cmd+Shift+X)
- Search for "Model Context Protocol"
- Install the extension from Microsoft
Once the extension is installed, VS Code will be able to communicate with this MCP server according to the configuration in your .vscode/mcp.json file. You can use the MCP server through VS Code's Copilot or any other MCP client built into VS Code.
To make changes to this project:
- Modify the code in the
src/pdf_reader_mcpdirectory - Install in development mode:
uv pip install -e . - Test your changes in VS Code
- Python 3.13+
- PyPDF2 3.0.0+
- MCP SDK 1.9.0+ (from github.com/modelcontextprotocol/python-sdk)
- VS Code with MCP extension
The server implements the following tools:
-
open-pdf: Open a PDF file
- Takes
pathas a required string argument - Returns a unique PDF ID for referencing in other operations
- Takes
-
close-pdf: Close an open PDF file
- Takes
pdf_idas a required string argument
- Takes
-
list-pdf-metadata: View metadata of an open PDF
- Takes
pdf_idas a required string argument
- Takes
-
get-pdf-page-count: Get the total number of pages in a PDF
- Takes
pdf_idas a required string argument
- Takes
-
get-pdf-page-text: Get the text content of a specific page in a PDF
- Takes
pdf_idas a required string argument - Takes
page_numberas a required integer argument (0-based index)
- Takes
-
pdf-to-text: Extract all text from a PDF document
- Takes
pdf_idas a required string argument - Optional
include_page_numbersas a boolean (default: true) - Optional
start_pageandend_pageas integers to extract a specific range
- Takes
The server provides the following prompts:
-
summarize-pdf: Generate a summary of a PDF document
- Required
pdf_idargument that identifies the PDF - Optional
styleargument to control detail level (brief/detailed)
- Required
-
extract-text-from-pdf: Extract text from specific pages or page ranges
- Required
pdf_idargument - Optional page or page range arguments (
page,start_page,end_page)
- Required
-
analyze-pdf: Analyze a PDF and answer questions about its content
- Required
pdf_idargument - Required
questionargument specifying what to analyze - Optional
page_rangeargument to focus on specific pages
- Required
Configure VS Code to use the MCP server by editing .vscode/mcp.json in your project:
Development Configuration
{
"servers": {
"pdf-reader": {
"type": "stdio",
"command": "uv",
"args": [
"--directory",
"${workspaceFolder}",
"run",
"python",
"-c",
"from pdf_reader_mcp import main; main()"
]
}
}
}Published Package Configuration
{
"servers": {
"pdf-reader": {
"type": "stdio",
"command": "pdf-reader-mcp"
}
}
}On MacOS: ~/Library/Application\ Support/Claude/claude_desktop_config.json
On Windows: %APPDATA%/Claude/claude_desktop_config.json
Development/Unpublished Servers Configuration
{
"mcpServers": {
"pdf-reader-mcp": {
"command": "uv",
"args": [
"--directory",
"${workspaceFolder}",
"run",
"pdf-reader-mcp"
]
}
}
}Published Servers Configuration
{
"mcpServers": {
"pdf-reader-mcp": {
"command": "uvx",
"args": [
"pdf-reader-mcp"
]
}
}
}To prepare the package for distribution:
- Sync dependencies and update lockfile:
uv sync- Build package distributions:
uv buildThis will create source and wheel distributions in the dist/ directory.
- Publish to PyPI:
uv publishNote: You'll need to set PyPI credentials via environment variables or command flags:
- Token:
--tokenorUV_PUBLISH_TOKEN - Or username/password:
--username/UV_PUBLISH_USERNAMEand--password/UV_PUBLISH_PASSWORD
Since MCP servers run over stdio, debugging can be challenging. For the best debugging experience, we strongly recommend using the MCP Inspector.
You can launch the MCP Inspector via npm with this command:
npx @modelcontextprotocol/inspector uv --directory "${workspaceFolder}" run pdf-reader-mcpUpon launching, the Inspector will display a URL that you can access in your browser to begin debugging.
- Fork the repo
- Create a new branch (
feature-branch) - Commit your changes
- Push to your branch and submit a PR!
This project is licensed under the MIT License.
For questions or support, reach out via GitHub Issues.

