Getting Started with Django MCP

This guide will walk you through setting up Django MCP in your Django REST Framework project.

Installation

uv add drf-mcp

Or with pip:

pip install drf-mcp

Quick Start

1. Create an MCP Server Script

Create a file called mcp_server.py in your Django project root:

#!/usr/bin/env python
"""
Django MCP Server for exposing DRF API as MCP tools
"""

import os
import django

# Setup Django
os.environ.setdefault("DJANGO_SETTINGS_MODULE", "myproject.settings")
django.setup()

from drf_mcp import DRFMCP

# Initialize MCP server
mcp = DRFMCP(
    name="MyEnterpriseAPI",
    version="1.0.0",
    description="Enterprise API exposed via Model Context Protocol"
)

# Option 1: Auto-discover all DRF views in URLconf
mcp.autodiscover()

# Option 2: Register specific ViewSets
# from myapp.views import CustomerViewSet
# mcp.register_viewset(CustomerViewSet, namespace="crm")

if __name__ == "__main__":
    # Run with stdio transport (default for Claude Desktop)
    mcp.run()

2. Run the Server

python mcp_server.py

The server will start listening for MCP requests via stdio.

3. Connect to Claude Desktop (or other MCP clients)

Edit ~/.claude_desktop_config.json:

{
  "mcpServers": {
    "django-api": {
      "command": "python",
      "args": ["/path/to/mcp_server.py"]
    }
  }
}

Then restart Claude Desktop. Your DRF API endpoints are now available as tools!

Key Concepts

ViewSet Tools

For each DRF ViewSet, Django MCP automatically creates separate tools for each action:

from rest_framework import viewsets
from drf_mcp import DRFMCP

class CustomerViewSet(viewsets.ModelViewSet):
    queryset = Customer.objects.all()
    serializer_class = CustomerSerializer
    # list, retrieve, create, update, destroy actions automatically exposed

mcp = DRFMCP("MyAPI")
mcp.register_viewset(CustomerViewSet, namespace="crm")

This generates tools:

  • crm_get_list_customers - List all customers (GET)

  • crm_post_create_customer - Create a customer (POST)

  • crm_get_retrieve_customer - Get a customer detail (GET with ID)

  • crm_put_update_customer - Update a customer (PUT)

  • crm_patch_partial_update_customer - Partial update (PATCH)

  • crm_delete_destroy_customer - Delete a customer (DELETE)

Custom Actions

ViewSet @action decorators are automatically discovered:

from rest_framework.decorators import action

class CustomerViewSet(viewsets.ModelViewSet):
    serializer_class = CustomerSerializer
    
    @action(detail=False, methods=['post'])
    def bulk_export(self, request):
        # Custom action
        pass

# Generated tool: crm_post_bulk_export

Schema Generation

DRF Serializers are automatically converted to JSON schemas for MCP:

class CustomerSerializer(serializers.ModelSerializer):
    class Meta:
        model = Customer
        fields = ['id', 'name', 'email', 'created_at']
        read_only_fields = ['id', 'created_at']

# Automatically converts to MCP-compatible JSON schema
# with proper required/optional/readonly field handling

Inspector CLI

Test your exposed tools without running a full MCP server:

python manage.py mcp_inspector

Options:

  • --namespace PREFIX - Filter tools by namespace

  • --output {json,table,text} - Output format

  • --endpoint PATH - Filter by endpoint path

  • --list-only - Only list tools, don’t enter interactive mode

Example:

python manage.py mcp_inspector --namespace crm --output json

Permission Integration

Django MCP respects your DRF permission classes:

from rest_framework.permissions import IsAuthenticated, IsAdminUser

class CustomerViewSet(viewsets.ModelViewSet):
    serializer_class = CustomerSerializer
    permission_classes = [IsAuthenticated, IsAdminUser]
    # Tools generated from this ViewSet enforce these permissions

MCP agents must authenticate before accessing restricted tools.

Next Steps