Skip to main content

MCP server for Constitute Project constitution scraping and analysis

Project description

Constitute MCP Server

A Model Context Protocol (MCP) server that provides tools for analyzing and scraping constitutional documents from the Constitute Project.

Features

This MCP server provides comprehensive tools for constitutional analysis:

Core Functionality

  • Constitution Listing: Get lists of all available constitutions with filtering options
  • Country Search: Find constitutions by country name with fuzzy matching
  • Full Text Scraping: Extract complete constitutional documents with structured parsing
  • Article Retrieval: Access specific articles by number or ranges
  • Keyword Search: Find articles containing specific terms
  • Topic Analysis: Search constitutions by legal topics (e.g., economic planning, environment, judiciary)
  • Data Export: Save constitutions as JSON or plain text files
  • Batch Operations: Scrape multiple constitutions efficiently

Available Tools

  1. get_constitutions_list - List all available constitutions
  2. find_constitution_by_country - Search constitutions by country name
  3. scrape_constitution - Download and parse a complete constitution
  4. get_article_by_number - Retrieve a specific article
  5. get_articles_range - Get multiple articles in a range
  6. search_articles_by_keyword - Find articles containing keywords
  7. topic_constitutions - Find constitutions by topic
  8. topic_sections - Get topic-related sections from constitutions
  9. export_constitution_json - Export constitution as JSON
  10. export_constitution_text - Export constitution as plain text
  11. scrape_all_constitutions - Batch scrape operation

Installation

Using uvx (Recommended)

# Install directly from PyPI (once published)
uvx constitute-mcp

# Or install from local development
uvx --from . constitute-mcp

Using pip

pip install constitute-mcp

Development Installation

Linux/macOS

# Clone the repository
git clone https://github.com/yourusername/constitute-mcp.git
cd constitute-mcp

# Initialize development environment
make init

Windows

# Clone the repository
git clone https://github.com/yourusername/constitute-mcp.git
cd constitute-mcp

# Initialize development environment
scripts\setup.bat

For detailed Windows instructions, see README_Windows.md.

Usage

As an MCP Server

Add to your MCP client configuration:

{
  "mcpServers": {
    "constitute": {
      "command": "constitute-mcp"
    }
  }
}

Example Usage

# Example tool calls through MCP client

# List all constitutions
get_constitutions_list()

# Find constitutions for a specific country
find_constitution_by_country(country_name="Taiwan")

# Scrape a specific constitution
scrape_constitution(constitution_id="taiwan")

# Get a specific article
get_article_by_number(constitution_id="taiwan", article_number="1")

# Search for articles about "freedom"
search_articles_by_keyword(constitution_id="taiwan", keyword="freedom")

# Find constitutions dealing with economic planning
topic_constitutions(topic_key="econplan")

Configuration

The server automatically handles:

  • Rate limiting (1 second delay between requests)
  • Request logging with unique IDs
  • Error handling and retry logic
  • File naming sanitization for Windows compatibility

Data Sources

This server uses the Constitute Project API (https://constituteproject.org), which provides:

  • 200+ constitutions from around the world
  • Current and historical constitutional texts
  • Structured data about constitutional topics
  • Professional legal annotations

Development

Project Structure

constitute-mcp/
├── constitute_mcp/
│   ├── __init__.py
│   ├── server.py          # Main MCP server implementation
│   └── scraper.py         # Constitution scraping logic
├── pyproject.toml         # Project configuration
├── README.md
└── scripts/
    ├── publish_to_pypi.py # Automated PyPI publishing
    └── version_manager.py # Automatic version management

Running Tests

pytest

Code Quality

# Format code
black constitute_mcp/

# Check imports
isort constitute_mcp/

# Type checking
mypy constitute_mcp/

Contributing

  1. Fork the repository
  2. Create a feature branch
  3. Make your changes
  4. Run tests and quality checks
  5. Submit a pull request

License

This project is licensed under the MIT License - see the LICENSE file for details.

Acknowledgments

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

constitute_mcp-0.1.8.tar.gz (19.4 kB view details)

Uploaded Source

Built Distribution

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

constitute_mcp-0.1.8-py3-none-any.whl (17.6 kB view details)

Uploaded Python 3

File details

Details for the file constitute_mcp-0.1.8.tar.gz.

File metadata

  • Download URL: constitute_mcp-0.1.8.tar.gz
  • Upload date:
  • Size: 19.4 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.2.0 CPython/3.13.3

File hashes

Hashes for constitute_mcp-0.1.8.tar.gz
Algorithm Hash digest
SHA256 b78db33764f9ee232d1bee61bd3d386e8faa62d257c81a4a690e99d743a03768
MD5 cc7f1b73faccd8ca8e11f9e5837417e1
BLAKE2b-256 fdf9ea81ab276ad5f7a7185201a70b61a349a4460165a1ad79efdffc77734b03

See more details on using hashes here.

File details

Details for the file constitute_mcp-0.1.8-py3-none-any.whl.

File metadata

  • Download URL: constitute_mcp-0.1.8-py3-none-any.whl
  • Upload date:
  • Size: 17.6 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.2.0 CPython/3.13.3

File hashes

Hashes for constitute_mcp-0.1.8-py3-none-any.whl
Algorithm Hash digest
SHA256 492bee9c64e15e52cd8c961e55b0dd60030d9c0da8dc571643dbd48261929049
MD5 a1e6874909037ab8672d12c62ff43ea6
BLAKE2b-256 7008b2d8a662697fb44dbef6c18633022faf9bfbf7ec41bddc74c339375f634b

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