Djangorestframework
БесплатноНе проверенExpose djangorestframework-services services and selectors as a Model Context Protocol (MCP) 2025-11-25 Streamable HTTP server.
Описание
Expose djangorestframework-services services and selectors as a Model Context Protocol (MCP) 2025-11-25 Streamable HTTP server.
README
CI PyPI Python versions Django versions Docs Coverage Ruff License
Expose djangorestframework-services services and selectors as a Model Context Protocol (MCP) server, conforming to MCP 2025-11-25 (Streamable HTTP).
Idea
Register ServiceSpec instances directly — no DRF router or viewset
involvement. The unit of registration is the ServiceSpec, not a view.
from django.urls import path
from rest_framework_services.types.selector_kind import SelectorKind
from rest_framework_services.types.selector_spec import SelectorSpec
from rest_framework_services.types.service_spec import ServiceSpec
from rest_framework_mcp import MCPServer
server = MCPServer(name="my-app")
server.register_service_tool(
name="invoices.create",
spec=ServiceSpec(
service=create_invoice,
input_serializer=InvoiceInputSerializer,
output_selector_spec=SelectorSpec(
kind=SelectorKind.RETRIEVE,
output_serializer=InvoiceOutputSerializer,
),
),
)
server.register_resource(
name="invoice",
uri_template="invoices://{pk}",
selector=SelectorSpec(
kind=SelectorKind.RETRIEVE,
selector=get_invoice,
output_serializer=InvoiceOutputSerializer,
),
)
urlpatterns = [path("mcp/", server.urls)]
A decorator form is also supported (@server.service_tool(...) / @server.resource(...)).
See the quickstart for the full end-to-end recipe.
- Services (mutations) → MCP tools.
- Selectors (reads) → MCP resources.
- A single
/mcpendpoint speaks Streamable HTTP. The/.well-known/oauth-protected-resourceendpoint comes mounted alongside.
What ships
- Tools —
tools/list,tools/callforregister_service_tool(mutations) andregister_selector_tool(reads, with optionalFilterSet+ ordering + pagination). - Resources —
resources/list,resources/templates/list,resources/readagainstSelectorSpec-backed callables; RFC 6570 templated URIs. - Prompts —
prompts/list,prompts/getagainst render callables returning strings,PromptMessages, or async coroutines. - In-process transport surface — call tools without an HTTP round-trip:
MCPServer.call_tool/acall_toolandlist_tools/alist_toolsdrive the same dispatch and permission checks as the wire path, for embedding in agent bridges, toolsets, or management commands. - Tool annotations — pass
annotations=at registration (or rely on the read/mutation default) to advertise MCP hints likereadOnlyHint/destructiveHintontools/list. - Generic
_meta— passmeta=at registration to populate the base protocol's free-form_metaobject on a tool, resource, or prompt's listing entry (and on thecontentsofresources/read). Passed through verbatim, so protocol extensions have somewhere to live. - Interactive views (MCP Apps) —
register_ui_resource(...)declares an HTML view with typed CSP / permission metadata;ui=UIToolMeta(...)on a tool links its result to that view, and a host renders it inline in the chat. The render payload is thestructuredContentyou already emit, and a view's owntools/calls inherit your auth, permissions and rate limits. An extension over base MCP, so no protocol bump. We declare; the host sandboxes and renders. - Pluggable auth —
DjangoOAuthToolkitBackend(default) andAllowAnyBackend(dev only). Per-bindingMCPPermissionclasses (ScopeRequired,DjangoPermRequired) plus your own. - RFC 8707 audience binding when
RESOURCE_URLis configured; RFC 9728 PRM served from the configured backend. - Per-binding rate limits —
MCPRateLimitProtocol withFixedWindowRateLimit,SlidingWindowRateLimit, andTokenBucketRateLimitimplementations shipped. - Output formats — JSON (default) and TOON (token-oriented; optional extra with safe JSON fallback).
- Async POST/DELETE + GET-side SSE push — sync
urlsfor WSGI,async_urlsfor ASGI;MCPServer.notify(session_id, payload)pushes JSON-RPC frames on the session's SSE stream. Per-workerInMemorySSEBrokeror cross-workerRedisSSEBroker(behind[redis]);Last-Event-IDresume viaInMemorySSEReplayBuffer/RedisSSEReplayBuffer. - OpenTelemetry instrumentation —
mcp.tools.call,mcp.resources.read,mcp.prompts.getspans (no-op without the[otel]extra installed). - Origin allowlist + protocol-version validation + session lifecycle per the 2025-11-25 transport rules.
Install
pip install djangorestframework-mcp-server # JSON only
pip install "djangorestframework-mcp-server[toon]" # +TOON encoder
pip install "djangorestframework-mcp-server[oauth]" # +django-oauth-toolkit backend
pip install "djangorestframework-mcp-server[redis]" # +Redis SSE broker for multi-worker ASGI
pip install "djangorestframework-mcp-server[otel]" # +OpenTelemetry instrumentation
pip install "djangorestframework-mcp-server[filter]" # +django-filter for selector-tool FilterSets
pip install "djangorestframework-mcp-server[spectacular]" # +drf-spectacular schema overrides
pip install "djangorestframework-mcp-server[jwt]" # +SimpleJWTCookieAdapter (djangorestframework-simplejwt)
pip install "djangorestframework-mcp-server[toon,oauth,redis,otel,filter,spectacular,jwt]" # everything
…or with uv:
uv add djangorestframework-mcp-server # JSON only
uv add "djangorestframework-mcp-server[toon]" # +TOON encoder
uv add "djangorestframework-mcp-server[oauth]" # +django-oauth-toolkit backend
uv add "djangorestframework-mcp-server[redis]" # +Redis SSE broker for multi-worker ASGI
uv add "djangorestframework-mcp-server[otel]" # +OpenTelemetry instrumentation
uv add "djangorestframework-mcp-server[filter]" # +django-filter for selector-tool FilterSets
uv add "djangorestframework-mcp-server[spectacular]" # +drf-spectacular schema overrides
uv add "djangorestframework-mcp-server[jwt]" # +SimpleJWTCookieAdapter (djangorestframework-simplejwt)
uv add "djangorestframework-mcp-server[toon,oauth,redis,otel,filter,spectacular,jwt]" # everything
Optional extras degrade gracefully: TOON falls back to JSON with a runtime
warning if python-toon is not installed, and the OAuth backend module
imports cleanly without oauth2_provider — the ImportError only fires when
you actually configure it.
Try it
Install mcp-inspector and point it at your dev server:
npx @modelcontextprotocol/inspector --url http://localhost:8000/mcp/
Inspector lists tools, fills in arguments from the generated JSON Schema, and walks the OAuth auth flow against your configured Authorization Server.
Documentation
- Quickstart — copy-pasteable end-to-end.
- Concepts — tools vs resources, sessions, output formats.
- Authentication — backends, permissions, audience binding, bring-your-own AS recipe.
- Recipes — focused cookbook entries.
- Reference — autodocs for every public symbol.
License
MIT.
Установка Djangorestframework
У этого сервера нет опубликованного пакета — он собирается из исходников. Открой репозиторий и следуй инструкции в README.
▸ github.com/Artui/djangorestframework-mcp-serverFAQ
Djangorestframework MCP бесплатный?
Да, Djangorestframework MCP бесплатный — установка в пару кликов через Unyly без оплаты.
Нужен ли API-ключ для Djangorestframework?
Нет, Djangorestframework работает без API-ключей и переменных окружения.
Djangorestframework — hosted или self-hosted?
Self-hosted: сервер запускается локально на твоей машине командой из раздела установки.
Как установить Djangorestframework в Claude Desktop, Claude Code или Cursor?
Открой Djangorestframework на unyly.org, выбери вкладку своего клиента (Claude Desktop, Claude Code, Cursor) и нажми Install — конфиг сгенерируется автоматически, без правки JSON.
Похожие MCP
GitHub
PRs, issues, code search, CI status
автор: GitHubFilesystem
Secure file operations with configurable access controls.
Memory
Knowledge graph-based persistent memory system.
Template MCP Server
A CLI tool to create a new Model Context Protocol server project with TypeScript support, dual transport options, and an extensible structure
автор: mcpdotdirectCompare Djangorestframework with
Не уверен что выбрать?
Найди свой стек за 60 секунд
Автор?
Embed-бейдж для README
Похожее
Все в категории development
