Skip to main content
Glama

Company API MCP Server Template

by Gilfeather

Company API MCP Server Template

A template for creating Model Context Protocol (MCP) servers that integrate with your company's API using FastMCP.

Overview

This template provides a starting point for building MCP servers that can interact with your company's REST API. It includes:

  • Authentication handling (Bearer token)
  • Comprehensive error handling and logging
  • In-memory caching for improved performance
  • Rate limiting to prevent API abuse
  • Full CRUD operations (Create, Read, Update, Delete)
  • Health check and status monitoring
  • Docker support for easy deployment
  • Comprehensive test suite
  • CI/CD pipeline with GitHub Actions
  • Example tools for common API operations
  • Environment variable configuration
  • Proper async/await patterns

Setup

  1. Clone this repository
  2. Install dependencies:
    # Production dependencies pip install -e . # Or with development dependencies make install-dev
  3. Set environment variables:
    export API_BASE_URL="https://your-api.example.com" export API_KEY="your-api-key-here" export CACHE_TTL="300" # Optional: cache TTL in seconds export RATE_LIMIT_REQUESTS="100" # Optional: rate limit

Docker Setup

Alternatively, use Docker:

# Build and run with docker-compose docker-compose up --build # Or build and run manually docker build -t company-api-mcp . docker run -e API_BASE_URL="https://your-api.example.com" \ -e API_KEY="your-api-key" \ company-api-mcp

Configuration

The server can be configured using environment variables:

  • API_BASE_URL: Base URL of your company's API
  • API_KEY: API key for authentication
  • CACHE_TTL: Cache time-to-live in seconds (default: 300)
  • RATE_LIMIT_REQUESTS: Maximum requests per minute (default: 100)

Usage

Running the server

python server.py

Available Tools

The template includes six example tools:

  1. get_user_info(user_id): Retrieve user information by ID
  2. search_items(query, limit): Search for items with optional limit
  3. create_item(title, description): Create a new item
  4. update_item(item_id, title, description): Update an existing item
  5. delete_item(item_id): Delete an item
  6. get_api_status(): Check API health and status

Customization

To adapt this template for your API:

  1. Update the API_BASE_URL and authentication method in server.py
  2. Modify the existing tools or add new ones based on your API endpoints
  3. Update the response formatting to match your API's data structure
  4. Add any additional error handling specific to your API

Example Tools Implementation

Basic Tool Template

@mcp.tool() async def your_custom_tool(param: str) -> str: """Description of what your tool does. Args: param: Description of the parameter """ data = await make_api_request(f"your-endpoint/{param}") if not data or "error" in data: return "Error message" # Format and return your data return formatted_response

CRUD Operations Examples

# Create @mcp.tool() async def create_resource(name: str, data: str) -> str: json_data = {"name": name, "data": data} result = await make_api_request("resources", method="POST", json_data=json_data) return format_response(result) # Read @mcp.tool() async def get_resource(resource_id: str) -> str: result = await make_api_request(f"resources/{resource_id}") return format_response(result) # Update @mcp.tool() async def update_resource(resource_id: str, name: str = None) -> str: json_data = {} if name: json_data["name"] = name result = await make_api_request(f"resources/{resource_id}", method="PUT", json_data=json_data) return format_response(result) # Delete @mcp.tool() async def delete_resource(resource_id: str) -> str: result = await make_api_request(f"resources/{resource_id}", method="DELETE") return format_response(result)

MCP Integration

To use this server with an MCP client, add it to your MCP configuration:

{ "mcpServers": { "company-api": { "command": "python", "args": ["/path/to/server.py"], "env": { "API_BASE_URL": "https://your-api.example.com", "API_KEY": "your-api-key" } } } }

Features

Caching

The server includes an in-memory cache to improve performance and reduce API calls. Cache entries expire after the configured TTL (default: 5 minutes).

Rate Limiting

Built-in rate limiting prevents API abuse by limiting the number of requests per minute (default: 100 requests/minute).

Logging

Comprehensive logging for debugging and monitoring:

  • Request/response logging
  • Cache hit/miss logging
  • Error logging with details
  • Rate limit warnings

Error Handling

Comprehensive error handling for:

  • HTTP status errors
  • Network timeouts
  • JSON parsing errors
  • API authentication failures
  • Rate limit exceeded

Flexible HTTP Methods

Support for all common HTTP methods:

  • GET: Retrieve data (with caching)
  • POST: Create new resources
  • PUT: Update existing resources
  • DELETE: Remove resources

Development

Project Structure

. ├── server.py # Main MCP server implementation ├── main.py # Simple CLI entry point ├── pyproject.toml # Project configuration ├── README.md # This file └── .gitignore # Git ignore rules

Adding New Tools

  1. Define your tool function with the @mcp.tool() decorator
  2. Use make_api_request() to call your API
  3. Handle errors appropriately
  4. Format the response for the user

Testing

Run the test suite:

# Install development dependencies pip install -e ".[dev]" # Run tests pytest # Run tests with coverage pytest --cov=. --cov-report=html # Run specific test file pytest tests/test_server.py -v

Code Quality

Using ruff for linting and formatting:

# Install development dependencies make install-dev # Run all checks make check # Fix linting issues automatically make fix # Run individual tools make lint # Check for issues make format # Format code make test # Run tests make test-cov # Run tests with coverage

Or run commands directly:

# Lint code ruff check . # Format code ruff format . # Type checking mypy server.py --ignore-missing-imports

License

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

Contributing

Please read CONTRIBUTING.md for details on our code of conduct and the process for submitting pull requests.

-
security - not tested
A
license - permissive license
-
quality - not tested

remote-capable server

The server can be hosted and run remotely because it primarily relies on remote services or has no dependency on the local environment.

A template for building Model Context Protocol servers that connect to company REST APIs using FastMCP, providing authentication handling, error management, and example tools for common API operations.

  1. Overview
    1. Setup
      1. Docker Setup
    2. Configuration
      1. Usage
        1. Running the server
        2. Available Tools
        3. Customization
      2. Example Tools Implementation
        1. Basic Tool Template
        2. CRUD Operations Examples
      3. MCP Integration
        1. Features
          1. Caching
          2. Rate Limiting
          3. Logging
          4. Error Handling
          5. Flexible HTTP Methods
        2. Development
          1. Project Structure
          2. Adding New Tools
          3. Testing
          4. Code Quality
        3. License
          1. Contributing

            Related MCP Servers

            • A
              security
              A
              license
              A
              quality
              A TypeScript-based template for building Model Context Protocol servers, featuring fast testing, automated version management, and a clean structure for MCP tool implementations.
              Last updated -
              1
              608
              4
              TypeScript
              MIT License
            • -
              security
              F
              license
              -
              quality
              A server implementation of the Model Context Protocol (MCP) that provides REST API endpoints for managing and interacting with MCP resources.
              Last updated -
              Python
            • -
              security
              A
              license
              -
              quality
              A REST API built with FastAPI that exposes endpoints via Model Context Protocol (MCP), allowing clients to interact with CRUD operations through MCP interfaces.
              Last updated -
              Python
              MIT License
              • Apple
              • Linux
            • -
              security
              A
              license
              -
              quality
              A server that implements the Model Context Protocol (MCP) with StreamableHTTP transport, enabling standardized interaction with model services through a RESTful API interface.
              Last updated -
              108
              1
              JavaScript
              MIT License

            View all related MCP servers

            MCP directory API

            We provide all the information about MCP servers via our MCP API.

            curl -X GET 'https://glama.ai/api/mcp/v1/servers/Gilfeather/mcp-template'

            If you have feedback or need assistance with the MCP directory API, please join our Discord server