mcpField
D
Django Admin MCP

Django Admin MCP

ローカル
7tg.github.io開発ツール301 日前に更新

Django Admin MCP について

django-admin-mcp は、ModelAdmin に mixin を一つ追加するだけで MCP クライアントから Django 管理画面のモデルを扱えるようにするアプリです。Django の権限、バリデーション、変更履歴をそのまま使うため、既存のアクセス制御を保ったままエージェントにデータを扱わせたい Django プロジェクト向けです。

主な機能

  1. 01既存の ModelAdmin から CRUD ツールを自動生成
  2. 02Django の権限チェックと full_clean 検証を利用
  3. 03登録済みの管理アクションをツールとして呼び出し
  4. 04書き込みを LogEntry の変更履歴に記録
  5. 05mcp_fields で機密フィールドを非公開に設定
  6. 06トークンは紐づくユーザーの権限範囲に限定

活用シーン

  1. 01エージェントから Django 管理画面のレコードを参照・更新
  2. 02公開や CSV エクスポートなど既存の一括アクションを実行
  3. 03エージェントによるデータ変更を監査可能な形で提供

MCP 対応

本パッケージは HTTP 経由で MCP エンドポイントを提供し、モデルの CRUD、管理アクション、関連参照、履歴のツールと、models:// および data:// の読み取り専用リソースを公開します。

設定

ローカルサーバーの設定はどのクライアントでも共通です。コピーしてクライアントの MCP 設定ファイルに貼り付けてください。

mcp.json · 共通設定
{
"mcpServers": {
"7tg-django-admin": {
"command": "uvx",
"args": [
"django-admin-mcp"
],
"env": {
"host": "<host>"
}
}
}
}
起動コマンドuvx django-admin-mcp
設定が必要な環境変数
hostHostname of your Django deployment that mounts django_admin_mcp.urls (e.g. admin.example.com)

ローカルサーバーにはマシン上の実行環境(Node.js 18 以上など)が必要です。設定ファイルの場所はクライアントごとに異なります。

パッケージ
pypidjango-admin-mcp0.11.1

ツール

ツール一覧はまだ取得されていません

ローカルサーバーのツールはマシン上で起動して初めて取得できます。メンテナーはまだツール一覧を提供していません。

詳細

django-admin-mcp

PyPI version PyPI downloads Python versions Django Tests codecov Documentation License MCP Registry Glama MCP server

ModelAdmin にミックスインを追加すると、MCP クライアントは Django の既存の権限の範囲内で、CRUD、管理アクション、リレーションシップのたどりを利用できます。依存関係は Django と Pydantic のみです。

django-admin-mcp の紹介:1つのミックスインで ModelAdmin を MCP ツールに変換し、すべての呼び出しが管理画面の権限、検証、監査ログを通過します。ユーザーごとに1つのトークン、エージェントとの会話、始め方を紹介します

1つのミックスイン、管理画面を通るリクエストの経路、トークン、エージェントとの会話、そして始め方。50秒 · 1080p · 60 fps · オリジナルサウンドトラック。動画を見る。

エージェントにデータベースアクセスを与えるだけではだめなのはなぜですか?

データベース接続を与えると、エージェントはテーブルに直接アクセスできます。Django admin には、誰が何を操作できるか、レコードをどのように検証するか、どの一括操作が許可されているかが、すでにプロジェクト内で定義されています。このパッケージは、そのレイヤーを迂回させず、エージェントをその内側に配置します。

  • 権限 — すべての呼び出しは ModelAdmin.has_*_permission() を通過します。トークンで実行できるのは、紐付けられたユーザーが実行できる操作だけです。アクセス権は付与されるまでありません。
  • 検証 — 書き込み時には full_clean() と、独自の save_model() / save_related() フックが実行されるため、エージェントが管理フォームで拒否されるレコードを保存することはできません。
  • 監査履歴 — 作成、更新、削除、アクションはすべて、トークンのユーザーに紐付けて Django の LogEntry に記録されます。エージェントが何を変更したか確認でき、エージェントも履歴を読み取れます。
  • 管理アクション — 「公開」「返金」「CSV エクスポート」など、登録済みのアクションが2段階の確認フローも含めてツールになります。エージェントは SQL を独自に考案するのではなく、設計済みの操作を使用します。
  • 公開範囲の制限 — mcp_fields / mcp_exclude_fields を使って、パスワードハッシュや秘密情報をエージェントから見えないようにできます。get_queryset() による行の絞り込みも引き続き適用されます。

比較

汎用の Django MCP サーバーや独自に作成した FastMCP ラッパーでは、ツール、スキーマ、権限チェックを関数ごとに自分で定義する必要があります。このパッケージは、すでに管理している ModelAdmin クラスを読み取ってツールを生成するため、フィールドの選択、クエリーセット、検証、アクション、権限を1か所に集約できます。エージェントには、管理画面に加えたすべての変更が反映されます。また、MCP SDK や追加の HTTP スタックを必要としない、通常の Django アプリとして提供されます。

インストール

pip install django-admin-mcp
# settings.py
INSTALLED_APPS = [
    'django_admin_mcp',
    # ...
]

# urls.py
urlpatterns = [
    path('mcp/', include('django_admin_mcp.urls')),
    # ...
]
python manage.py migrate django_admin_mcp

クイックスタート

1. モデルを公開します。 mcp_expose = True を設定すると、そのモデル用のツールが生成されます。ミックスインを持つだけでこのフラグがないモデルは、find_models からのみ検出できます。

from django.contrib import admin
from django_admin_mcp import MCPAdminMixin
from .models import Article, Author

@admin.register(Article)
class ArticleAdmin(MCPAdminMixin, admin.ModelAdmin):
    mcp_expose = True                    # list_article, get_article, create_article, ...
    mcp_exclude_fields = ['internal_notes']
    list_display = ['title', 'author', 'published']

@admin.register(Author)
class AuthorAdmin(MCPAdminMixin, admin.ModelAdmin):
    pass                                 # discoverable, no direct tools

2. トークンを作成します 管理画面の /admin/django_admin_mcp/mcptoken/ で行います。エージェントが必要とする権限とグループを正確に付与してください。紐付けられたユーザーがトークンで実行できる操作の上限を定め、その変更が記録される際の識別情報となります。

3. MCP クライアントを接続します たとえば Claude Code の .mcp.json では次のように記述します。

{
  "mcpServers": {
    "django-admin": {
      "type": "http",
      "url": "http://localhost:8000/mcp/",
      "headers": { "Authorization": "Bearer YOUR_TOKEN" }
    }
  }
}

4. エージェントに依頼します。

User: Show me the latest 10 articles
Agent: [calls list_article with limit=10]

User: Mark articles 1, 2 and 3 as published
Agent: [calls action_article with action="mark_as_published", ids=[1, 2, 3]]

User: What changed on article 42?
Agent: [calls history_article with id=42]

ツール

公開された各モデル(ここでは Article)に対して、サーバーは次のものを生成します。

ツール動作
list_article, get_articleページネーションとフィルタリングを伴う読み取り(view 権限が必要)
create_article, update_article, delete_article単一レコードの書き込み(add / change / delete 権限が必要)
bulk_article複数レコードの一括作成、更新、削除
actions_article, action_article登録済みの管理アクションの一覧表示と実行(ファイルを返すエクスポートを含む)
describe_articleフィールド定義、型、制約
related_article外部キーと逆リレーションの追跡
history_articleDjango 管理画面の変更履歴
autocomplete_article外部キーフィールドの検索候補

さらに、公開されているすべてのものを検出する find_models、一般的なワークフロー向けの MCP プロンプト、models:// と data:// URI の読み取り専用リソースがあります。エンドポイントは HTTP 上の JSON-RPC 2.0 で通信し、ヘルスチェック用に GET /mcp/health/ を備えています。詳細なリファレンスはドキュメントにあります。

セキュリティの概要

  • トークンは mcp_<key>.<secret> の形式です。保存されるのはシークレットのソルト付きハッシュのみです。
  • 各トークンは独自の権限とグループを持ち、そのユーザーの権限と交差したものが適用されます。ユーザーを無効化すると、そのトークンも無効になります。
  • 有効期限は設定可能です。トークンを取り消すには、管理画面で無効化または削除します。
  • 機密値はログメッセージから伏せられ、大きなアクションのダウンロードは MCP_ACTION_MAX_FILE_BYTES(デフォルト 5 MiB)で上限が設けられます。

詳細は権限とトークン管理を参照してください。

要件

Python 3.10 から 3.14、Django 3.2 から 6.0、Pydantic 2。この範囲のすべての Django リリースに対してテスト済みです。

プロジェクトを支援する

これが時間の節約になったなら、GitHub でのスターが他の人の発見につながります。Issue と PR を歓迎します。コントリビューションガイドを参照してください。

Star History Chart

ライセンス

MIT

コメント

MCP は初めてですか?

プロトコルの概要から最初のサーバーの導入まで、よくある疑問にまとめて答えます。

AI アプリケーションが外部のツールやデータソースに統一的な方法で接続するためのオープンなプロトコルです。クライアントはモデルとの対話を担い、MCP サーバーはツール・リソース・プロンプトテンプレートを提供します。標準メッセージでやり取りするため、1 つのサーバーを複数のクライアントで再利用できます。