Skip to main content
Glama
NexaScience

test-lnar-hosting-python-postgres

by NexaScience

test-lnar-hosting-python-postgres

Notes の CRUD を提供する FastAPI サーバーと、それを MCP ツールとして公開する MCP サーバーのサンプルです。

test-lnar-hosting-python の PostgreSQL 版です。元のサンプルがデータをプロセス内メモリ(dict)に 持っていたのに対し、本リポジトリは PostgreSQL にデータを永続化 します。プロセスを再起動・ 再デプロイしてもノートは消えません。

FastAPI の /mcp に MCP Streamable HTTP エンドポイントをマウントしているため、1プロセス・1ポートで REST API と MCP の両方を提供します

データストア

  • ノートは PostgreSQL の notes テーブルに保存されます(起動時に自動作成)。

  • 接続先は環境変数 DATABASE_URL から読み込みます(例: postgresql://user:pass@host:5432/dbname)。

    • lnar 上では、設置したマネージドDB(または接続した外部DB)の接続文字列が DATABASE_URL として自動注入されます。

    • ローカル開発では未設定時に postgresql://postgres:postgres@localhost:5432/postgres を使います。

CREATE TABLE notes (
    id      UUID PRIMARY KEY,
    title   TEXT NOT NULL,
    content TEXT NOT NULL,
    tags    TEXT[] NOT NULL DEFAULT '{}'
);

Related MCP server: Notes MCP Server

起動方法

1. 依存関係のインストール

uv sync

2. PostgreSQL を用意(ローカル例)

docker run --rm -e POSTGRES_PASSWORD=postgres -p 5432:5432 postgres:16

3. サーバーを起動

# 既定以外の DB に繋ぐ場合は DATABASE_URL を設定
export DATABASE_URL="postgresql://postgres:postgres@localhost:5432/postgres"
uvicorn api:app --reload

エンドポイント一覧

Method

Path

説明

GET

/health

ヘルスチェック

GET

/version

API のバージョン情報を取得

GET

/notes

ノートの一覧を取得

GET

/notes/count

ノートの件数を取得

GET

/notes/tags

タグ一覧を取得

POST

/notes

ノートを作成

DELETE

/notes

すべてのノートを削除(0件のときは 204)

GET

/notes/{note_id}

ノートを ID で取得

PUT

/notes/{note_id}

ノートを更新

DELETE

/notes/{note_id}

ノートを削除

GET

/stream

ログストリーミング検証用

MCP ツール一覧

ツール名

説明

list_notes

すべてのノートの一覧を取得

count_notes

ノートの件数を取得

list_tags

タグ一覧を取得

get_note

ID を指定してノートを取得

create_note

新しいノートを作成

update_note

ノートのタイトル/本文/タグを更新

delete_note

ノートを ID で削除

delete_all_notes

すべてのノートを一括削除

curl での動作確認

# ノート作成
curl -s -X POST http://localhost:8000/notes \
  -H 'Content-Type: application/json' \
  -d '{"title": "memo", "content": "hello", "tags": ["a"]}'

# 一覧取得
curl -s http://localhost:8000/notes

# 件数取得
curl -s http://localhost:8000/notes/count

# 永続化の確認: サーバーを再起動してもノートが残る

MCP クライアントからの接続

supergateway 経由で Streamable HTTP に接続する場合(lnar ダッシュボードで表示される設定):

{
  "mcpServers": {
    "test-lnar-hosting-python-postgres": {
      "command": "npx",
      "args": ["-y", "supergateway", "--streamableHttp", "http://localhost:8000/mcp"]
    }
  }
}

stdio transport(Claude Desktop / MCP Inspector 直接接続)を使う場合:

python mcp_server.py

Related MCP Connectors

Related MCP Servers