0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

Django-Ninja x MCP:1つのDjangoサーバーでWeb・REST API・MCPサービスを一括ホストする(django-ninja-mcp版)

0
Last updated at Posted at 2026-08-08

近年、LLM(大規模言語モデル)に外部のデータベースやAPIツールを統合するための統一規格として MCP(Model Context Protocol) が急速に広まっています。AIエージェントに自社サービスの機能を提供したい場合、MCPサーバーの構築は非常に強力な選択肢です。

しかし、「MCP用にわざわざ別サーバーを立てたり、APIロジックを二重で管理したりしたくない……」と感じる方も多いのではないでしょうか?

本記事では、Pythonのモダンで高速なAPIフレームワークである Django-Ninja をベースに、単一のDjangoサーバー上で「Webサービス」「REST API」「MCPサービス」をまとめてホストする構成 を紹介します。既存のDjango APIエンドポイントをそのままMCPツールとして活用できるため、エージェント連携のオーバーヘッドを劇的に削減できます。

注意
本記事で紹介する方法は、プレビュー版(アルファ版)のパッケージ(django-ninja-mcp 等)を使用しています。将来的な仕様変更の可能性がある点をご理解の上でお試しください。

利用ソフトウェアのバージョン

  • uv: 0.12.2
  • mcp: 1.6.0
  • django: 5.2
  • django-ninja: 改造版(環境構築参照)
  • django-ninja-mcp: 0.0.1a2
  • Bionic(クライアントとして確認用): 1.0.6+5

サンプルサーバー構築

以下の手順は、macOSで確認しています。

環境構築

uvでsampleというフォルダーを作りDjangoの環境構築をします。

uv init --no-package -p 3.14 sample
cd sample
mkdir src
rm main.py
uv add \
  "mcp==1.6.0" \
  "django==5.2" \
  "django-ninja@git+https://github.com/mikeedjones/django-ninja.git@a1a5273" \
  "django-ninja-mcp==0.0.1a2"

プロジェクトとアプリの作成

以下のようにしてプロジェクトとアプリを作成します。

uv run django-admin startproject project src
uv run --directory src manage.py startapp core

実装

settings.pyに設定を、urls.pyにルーティングを、api.pyにAPIの実装を追加します。

ここでは、weatherというサービスを実装します。

src/project/settings.py抜粋

# 既存の INSTALLED_APPS に daphne, ninja, core アプリを追加
INSTALLED_APPS = [
    "daphne",
    "django.contrib.admin",
    "django.contrib.auth",
    "django.contrib.contenttypes",
    "django.contrib.sessions",
    "django.contrib.messages",
    "django.contrib.staticfiles",
    "ninja",
    "core.apps.CoreConfig",
]

ASGI_APPLICATION = "project.asgi.application"

src/project/urls.py

from django.contrib import admin
from django.urls import path

from core.api import api

urlpatterns = [
    path("admin/", admin.site.urls),
    path("api/", api.urls),
]

src/core/api.py

from ninja import NinjaAPI
from ninja_mcp import NinjaMCP

api = NinjaAPI()


@api.get("/weather/{city}")
def weather(request, city: str) -> dict[str, str]:
    """都市の天気"""
    return {"message": f"{city}の天気は曇りのち晴れ"}


mcp_server = NinjaMCP(
    ninja=api,
    base_url="http://localhost:8000/api",
    name="Sample API",
    description="API with MCP integration",
)

mcp_server.mount(api, mount_path="/mcp")

実行

マイグレーションを実行し、サーバーを起動します。

uv run --directory src manage.py migrate
uv run --directory src manage.py runserver

Web確認

http://localhost:8000/adminでWebを確認できます。以下でユーザーを作成するとログインできます。

uv run --directory src manage.py createsuperuser

API確認

http://localhost:8000/api/docsでAPIを確認できます。

MCP確認

ここではBionicで確認します。以下からダウンロードしてインストールできます。

MCP設定

Bionicを起動したら設定画面(⌘+カンマ)を開き、左のタブの「Connected Apps」を選んでください。
右下の「Add custom MCP」で開く画面で以下を設定し、「Add MCP」を押してください。

左上の「Back to app」で戻り、チャット画面を開いてください。

「東京の天気」を入力してください。
「東京の天気は曇りのち晴れです。」と帰ってきたら成功です。

参考

下記は django-ninja-mcp を使わない紹介記事です。独自実装のため、Djangoなどの最新版を利用しやすいです。

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?