Source code for rossum_mcp.server

#!/usr/bin/env python3
from __future__ import annotations

import logging
import os

from fastmcp import FastMCP
from rossum_api import AsyncRossumAPIClient
from rossum_api.dtos import Token

from rossum_mcp.logging_config import setup_logging
from rossum_mcp.tools import (
    register_create_tools,
    register_delete_tools,
    register_discovery_tools,
    register_get_tools,
    register_update_tools,
)
from rossum_mcp.tools.base import VALID_MODES

logger = logging.getLogger(__name__)


[docs] def create_app() -> FastMCP: """Create and configure the MCP server. Reads configuration from environment variables: - ``ROSSUM_API_BASE_URL`` (required) - ``ROSSUM_API_TOKEN`` (required) - ``ROSSUM_MCP_MODE`` (optional, default: read-write) - ``ROSSUM_MCP_LOG_LEVEL`` (optional, default: INFO) """ setup_logging(log_level=os.environ.get("ROSSUM_MCP_LOG_LEVEL", "INFO")) base_url = os.environ["ROSSUM_API_BASE_URL"].rstrip("/") api_token = os.environ["ROSSUM_API_TOKEN"] mcp_mode = os.environ.get("ROSSUM_MCP_MODE", "read-write").lower() if mcp_mode not in VALID_MODES: raise ValueError(f"Invalid ROSSUM_MCP_MODE: {mcp_mode}. Must be one of: {VALID_MODES}") logger.info(f"Rossum MCP Server starting in {mcp_mode} mode") mcp = FastMCP("rossum-mcp-server") client = AsyncRossumAPIClient(base_url=base_url, credentials=Token(token=api_token)) register_discovery_tools(mcp) register_get_tools(mcp, client) register_delete_tools(mcp, client) register_create_tools(mcp, client, base_url) register_update_tools(mcp, client, base_url) @mcp.tool(description="Get the current MCP operation mode (read-only or read-write).") async def get_mcp_mode() -> dict: return {"mode": mcp_mode} # Enforce read-only mode by hiding write tools via FastMCP visibility if mcp_mode == "read-only": mcp.disable(tags={"write"}) return mcp
[docs] def main() -> None: """Main entry point for console script.""" app = create_app() app.run()
if __name__ == "__main__": main()