Skip to main content
Glama
shinji0214

mcp-memo-server

by shinji0214
README.md
# mcp-memo-server

Claude Code から使えるシンプルなメモ管理 MCP サーバです。学習用のサンプル実装です。
簡易的なユーザー認証(ユーザー登録 / ログイン / セッショントークン)に対応しており、メモはユーザーごとに分離されます。

## 提供するツール

| ツール名      | 説明                                     | 引数                          |
| ------------- | ---------------------------------------- | ----------------------------- |
| `register`    | ユーザーを新規登録する                   | `username: string`, `password: string` |
| `login`       | ログインしてセッショントークンを取得する | `username: string`, `password: string` |
| `add_memo`    | メモを追加する(要ログイン)             | `token: string`, `text: string` |
| `list_memos`  | 自分の登録済みメモの一覧を取得する(要ログイン) | `token: string`         |
| `delete_memo` | 指定IDの自分のメモを削除する(要ログイン)| `token: string`, `id: number` |

メモは `memos.json`(プロジェクト直下)に、ユーザー情報は `users.json` に保存されます。いずれも `.gitignore` 済みです。

### 認証の仕組み(学習ポイント)

- パスワードは Node.js 標準の `crypto.scrypt` でソルト付きハッシュ化して `users.json` に保存します(平文保存はしません)。
- `login` に成功するとランダムなセッショントークンが発行されます。トークンは**サーバプロセスのメモリ上のみ**で管理しており、有効期限は2時間、サーバ再起動で失効します。
- `add_memo` / `list_memos` / `delete_memo` は `token` を検証し、有効なセッションがなければエラーを返します。
- `list_memos` / `delete_memo` はトークンに紐づく `userId` でメモを絞り込むため、他人のメモは見えません。

> 注意: これは stdio transport(ローカルプロセス)における学習用の認証実装です。stdio の場合、サーバを起動できる時点でプロセスへの実行権限自体は持っているため、ここでの認証は「本物のセキュリティ境界」というより「複数ユーザーの使い分け」と「認証フローの実装を学ぶ」ことが目的です。

## セットアップ

```bash
npm install
npm run build
```

## Claude Code への登録

ビルド後、プロジェクトの絶対パスを使って登録します。

```bash
claude mcp add --transport stdio memo-server -- node /絶対パス/mcp-memo-server/build/index.js
```

登録できたか確認:

```bash
claude mcp list
```

Claude Code のセッション内で `/mcp` と入力すると、`memo-server` が `connected` になっていることを確認できます。

## 使い方の例(Claude Code 内での会話)

```
> ユーザー名 taro、パスワード pass1234 で登録して
> taro でログインして
> 「Qiitaのネタを考える」というメモを追加して
> 今登録されているメモを一覧で見せて
> ID 1 のメモを削除して
```

ログイン時に発行されたトークンは会話の中でClaudeが記憶し、以降の `add_memo` / `list_memos` / `delete_memo` 呼び出しに自動的に使い回されます。

## 手動での動作確認

`test-client.mjs` は、子プロセスとして起動したサーバに直接 JSON-RPC メッセージ
(`initialize` → `tools/list` → `tools/call`)を送って応答を確認する簡易スクリプトです。

```bash
node test-client.mjs
```

## 削除する場合

```bash
claude mcp remove memo-server
```

TDQS

A3.9/5.0

Scored across 5 tools

Disambiguation5/5

Each tool has a clearly distinct purpose: register/login handle authentication, while add_memo, list_memos, and delete_memo cover distinct memo operations. There is no meaningful overlap or ambiguity between any two tools.

Naming Consistency4/5

Most tools follow a clear imperative verb_noun pattern like add_memo, list_memos, and delete_memo. register and login are standard auth verbs without a noun object, and list_memos uses a plural while delete_memo is singular, but the overall naming is predictable and readable.

Tool Count5/5

Five tools is well-scoped for a simple memo server requiring authentication and basic memo management. Every tool earns its place, and there are no redundant or unnecessary additions.

Completeness3/5

The set covers registration, login, creating memos, listing memos, and deleting memos, but lacks an update/edit memo operation and an explicit logout tool. Editing an existing memo requires deleting and recreating it, which is a notable gap for a memo service.

Maintenance

ActivityMaintained
ResponsivenessNo issues