🚀 Professional MCP Server for Docs
Complete API integration with 31 tools including document content editing via Yjs
📖 Documentation • 🚀 Installation • 🛠️ Usage • 🤝 Contributing • 📋 Changelog
The Docs MCP Server provides seamless integration between Claude and Docs instances through the Model Context Protocol (MCP). It enables Claude to interact with collaborative documents, manage access permissions, and leverage AI-powered features directly within the Docs ecosystem.
- 📄 Create, read, update, and delete documents
- 🌳 Navigate hierarchical document structures
↔️ Move and reorganize documents in trees- 📋 Duplicate documents with or without permissions
- ⭐ Manage favorites and restore from trashbin
- 📖 Read document content as plain text
- ✍️ Update documents with text or markdown
- 🔄 Apply AI transformations directly to documents
- 🌍 Translate document content automatically
- 🔧 Yjs (CRDT) format support for collaborative editing
- 🔐 Grant and revoke user permissions (reader, editor, administrator, owner)
- 📧 Send email invitations to external users
- 🔍 Search for users across the platform
- 📮 Manage pending invitations
- ✍️ Text correction and grammar checking
- 🔄 Content rephrasing and summarization
- 🌍 Multi-language translation support
- ⚡ Custom AI transformations
- 📖 Browse document version history
- 🔍 Retrieve specific version content
- 📊 Track changes over time
- 31 Tools: Comprehensive set of operations including content editing
- 4 Resources: Real-time data access
- Type Safety: Full TypeScript-style type hints
- Error Handling: Robust error management
- Yjs Support: Native collaborative document format
pip install docs-mcp-servergit clone https://github.com/nic01asFr/docs-mcp-server.git
cd docs-mcp-server
pip install -e \".[dev]\"export DOCS_BASE_URL=\"https://your-docs-instance.com\"
export DOCS_API_TOKEN=\"your-api-token\"
export DOCS_TIMEOUT=30 # Optional: request timeout in seconds
export DOCS_MAX_RETRIES=3 # Optional: maximum retry attemptsdocs-mcp-server --config-checkOutput:
✓ Configuration loaded successfully
Base URL: https://docs.example.com
Token: ****-token-****-1234
Timeout: 30s
Max retries: 3
✓ API connection successful
Authenticated as: user@example.com
User ID: user-123
# Start with environment variables
docs-mcp-server
# Start with explicit configuration
docs-mcp-server --base-url https://docs.example.com --token your-token
# Start with custom server name
docs-mcp-server --name my-docs-server
# Start with verbose logging
docs-mcp-server --verbosepython -m docs_mcp_serverimport asyncio
from docs_mcp_server import DocsServer
async def main():
server = DocsServer(
base_url=\"https://docs.example.com\",
token=\"your-token\",
server_name=\"my-docs-server\"
)
await server.run()
if __name__ == \"__main__\":
asyncio.run(main())📄 Document Operations (6 tools)
| Tool | Description |
|---|---|
docs_list_documents |
List documents with filtering and pagination |
docs_get_document |
Retrieve a specific document by ID |
docs_create_document |
Create new documents (root or child) |
docs_update_document |
Update document title and content |
docs_delete_document |
Soft delete documents |
docs_restore_document |
Restore deleted documents |
✏️ Document Content Editing (4 tools)
| Tool | Description |
|---|---|
docs_get_content_text |
Read document content as plain text |
docs_update_content |
Update document with text or markdown |
docs_apply_ai_transform |
Apply AI transformation and save to document |
docs_apply_ai_translate |
Translate and save document content |
🌳 Tree Operations (4 tools)
| Tool | Description |
|---|---|
docs_move_document |
Move documents in tree structure |
docs_duplicate_document |
Create document copies |
docs_get_children |
Get immediate child documents |
docs_get_tree |
Get complete tree structure |
🔐 Access Management (7 tools)
| Tool | Description |
|---|---|
docs_list_accesses |
List document permissions |
docs_grant_access |
Grant user access to documents |
docs_update_access |
Modify existing permissions |
docs_revoke_access |
Remove user access |
docs_invite_user |
Send email invitations |
docs_list_invitations |
List pending invitations |
docs_cancel_invitation |
Cancel invitations |
👤 User & Content Management (8 tools)
| Tool | Description |
|---|---|
docs_search_users |
Search users by email |
docs_get_current_user |
Get current user information |
docs_add_favorite |
Add documents to favorites |
docs_remove_favorite |
Remove from favorites |
docs_list_favorites |
List favorite documents |
docs_list_trashbin |
List deleted documents |
docs_list_versions |
List document version history |
docs_get_version |
Get specific version content |
🤖 AI Features (2 tools)
| Tool | Description |
|---|---|
docs_ai_transform |
AI text transformation (correct, rephrase, summarize) |
docs_ai_translate |
AI translation services |
| Resource | Description |
|---|---|
docs://documents |
All accessible documents |
docs://favorites |
User's favorite documents |
docs://trashbin |
Soft-deleted documents |
docs://user |
Current user information |
from docs_mcp_server import create_client
async def example():
async with create_client() as client:
# Create a document
doc = await client.create_document(
title=\"Project Proposal\",
content=\"# Project Overview\\n\\nThis is our new project...\"
)
# Grant access to a colleague
await client.grant_access(
document_id=doc.id,
user_email=\"colleague@example.com\",
role=\"editor\"
)
# Use AI to improve content
improved = await client.ai_transform(
document_id=doc.id,
text=\"This text needs improvement\",
action=\"rephrase\"
)
print(f\"Improved text: {improved.result}\")import asyncio
from docs_mcp_server import DocsServer
async def main():
server = DocsServer(
base_url=\"https://docs.example.com\",
token=\"your-token\",
server_name=\"company-docs\"
)
await server.run()
asyncio.run(main())from docs_mcp_server import DocsAPIClient, DocsError, DocsNotFoundError
async def robust_example():
try:
async with DocsAPIClient() as client:
doc = await client.get_document(\"non-existent-id\")
except DocsNotFoundError:
print(\"Document not found\")
except DocsError as e:
print(f\"API error: {e.message}\")
except Exception as e:
print(f\"Unexpected error: {e}\")git clone https://github.com/nic01asFr/docs-mcp-server.git
cd docs-mcp-server
pip install -e \".[dev]\"
pre-commit install# Run all tests
pytest
# Run with coverage
pytest --cov=docs_mcp_server --cov-report=html
# Run specific test file
pytest tests/test_client.py -v# Linting and formatting
ruff check src/ tests/
ruff format src/ tests/
# Type checking
mypy src/docs_mcp_server
# Security scanning
bandit -r src/
safety check# Serve documentation locally
mkdocs serve
# Build documentation
mkdocs build- 🧪 Comprehensive test suite with >95% coverage
- 🔒 Type safety with mypy and pydantic
- 🧹 Code quality with ruff and pre-commit hooks
- 🛡️ Security scanning with bandit and safety
- 📊 Performance monitoring and optimization
- 🔑 Secure API token management
- 🌐 HTTPS-only communication
- ✅ Input validation and sanitization
- 💾 No sensitive data storage
- 📋 Comprehensive security documentation
- 🔄 Automated testing on multiple Python versions (3.10-3.12)
- 📦 Automated PyPI publishing on releases
- 🔍 Security vulnerability scanning
- 📈 Performance regression testing
- 📖 Comprehensive API documentation
- 💡 Usage examples and tutorials
- 🤝 Contribution guidelines
- 🔒 Security policy
- 📋 Detailed changelog
This project is licensed under the MIT License - see the LICENSE file for details.
We welcome contributions! Please see our Contributing Guidelines for details.
<a href="https://github.com/nic01asFr/docs-mcp-server/graphs/contributors\"> <img src="https://contrib.rocks/image?repo=nic01asFr/docs-mcp-server\" />
- Model Context Protocol for the MCP specification
- La Suite Numérique and the DINUM team for creating the Docs platform
- All contributors and users of this project
Made with ❤️ by Nicolas LAVAL
Enabling seamless AI integration with collaborative documentation