paput-mcp 1.0.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/LICENSE.txt +21 -0
- package/README.md +84 -0
- package/dist/handlers/create-memo.js +70 -0
- package/dist/handlers/create-memo.js.map +1 -0
- package/dist/handlers/index.js +2 -0
- package/dist/handlers/index.js.map +1 -0
- package/dist/index.js +9 -0
- package/dist/index.js.map +1 -0
- package/dist/old-index.js +210 -0
- package/dist/old-index.js.map +1 -0
- package/dist/server/paput-server.js +38 -0
- package/dist/server/paput-server.js.map +1 -0
- package/dist/server.js +35 -0
- package/dist/server.js.map +1 -0
- package/dist/services/api-service.js +44 -0
- package/dist/services/api-service.js.map +1 -0
- package/dist/services/index.js +2 -0
- package/dist/services/index.js.map +1 -0
- package/dist/services/paput-api.js +45 -0
- package/dist/services/paput-api.js.map +1 -0
- package/dist/tool.js +57 -0
- package/dist/tool.js.map +1 -0
- package/dist/tools/memo.js +134 -0
- package/dist/tools/memo.js.map +1 -0
- package/dist/types/create-memo.js +2 -0
- package/dist/types/create-memo.js.map +1 -0
- package/dist/types/index.js +2 -0
- package/dist/types/index.js.map +1 -0
- package/dist/types/mcp.js +2 -0
- package/dist/types/mcp.js.map +1 -0
- package/dist/types/paput.js +2 -0
- package/dist/types/paput.js.map +1 -0
- package/dist/utils/config.js +23 -0
- package/dist/utils/config.js.map +1 -0
- package/dist/utils/error-handler.js +10 -0
- package/dist/utils/error-handler.js.map +1 -0
- package/dist/utils/logger.js +19 -0
- package/dist/utils/logger.js.map +1 -0
- package/package.json +47 -0
package/LICENSE.txt
ADDED
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
MIT License
|
|
2
|
+
|
|
3
|
+
Copyright (c) 2025 mizuko
|
|
4
|
+
|
|
5
|
+
Permission is hereby granted, free of charge, to any person obtaining a copy
|
|
6
|
+
of this software and associated documentation files (the "Software"), to deal
|
|
7
|
+
in the Software without restriction, including without limitation the rights
|
|
8
|
+
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
|
9
|
+
copies of the Software, and to permit persons to whom the Software is
|
|
10
|
+
furnished to do so, subject to the following conditions:
|
|
11
|
+
|
|
12
|
+
The above copyright notice and this permission notice shall be included in all
|
|
13
|
+
copies or substantial portions of the Software.
|
|
14
|
+
|
|
15
|
+
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
|
16
|
+
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
|
17
|
+
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
|
18
|
+
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
|
19
|
+
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
|
20
|
+
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
|
21
|
+
SOFTWARE.
|
package/README.md
ADDED
|
@@ -0,0 +1,84 @@
|
|
|
1
|
+
# PaPut MCP サーバー
|
|
2
|
+
|
|
3
|
+
[PaPut](https://paput.io) と連携する Model Context Protocol (MCP) サーバーです。
|
|
4
|
+
AI アシスタント(Windsurf、Cursor、Claude Desktop 等)から PaPut にメモを作成することができます。
|
|
5
|
+
|
|
6
|
+
## 機能
|
|
7
|
+
|
|
8
|
+
- AI アシスタントから PaPut にメモを作成
|
|
9
|
+
- メモにカテゴリを設定
|
|
10
|
+
- メモの公開/非公開設定
|
|
11
|
+
|
|
12
|
+
## インストール
|
|
13
|
+
|
|
14
|
+
npm を使用してグローバルにインストールする場合:
|
|
15
|
+
|
|
16
|
+
```bash
|
|
17
|
+
npm install -g paput-mcp
|
|
18
|
+
```
|
|
19
|
+
|
|
20
|
+
または、npx を使用して直接実行することもできます:
|
|
21
|
+
|
|
22
|
+
```bash
|
|
23
|
+
npx paput-mcp
|
|
24
|
+
```
|
|
25
|
+
|
|
26
|
+
## 設定方法
|
|
27
|
+
|
|
28
|
+
### Windsurf での設定
|
|
29
|
+
|
|
30
|
+
API キーは PaPut の設定画面から取得できます。
|
|
31
|
+
|
|
32
|
+
```json
|
|
33
|
+
"mcpServers": {
|
|
34
|
+
"paput": {
|
|
35
|
+
"command": "npx",
|
|
36
|
+
"args": ["-y", "paput-mcp"],
|
|
37
|
+
"env": {
|
|
38
|
+
"PAPUT_API_KEY": "あなたのAPIキー"
|
|
39
|
+
}
|
|
40
|
+
}
|
|
41
|
+
}
|
|
42
|
+
```
|
|
43
|
+
|
|
44
|
+
### Cursor での設定
|
|
45
|
+
|
|
46
|
+
```json
|
|
47
|
+
"ai.mcpServers": [
|
|
48
|
+
{
|
|
49
|
+
"name": "paput",
|
|
50
|
+
"command": "npx",
|
|
51
|
+
"args": ["-y", "paput-mcp"],
|
|
52
|
+
"env": {
|
|
53
|
+
"PAPUT_API_KEY": "あなたのAPIキー"
|
|
54
|
+
}
|
|
55
|
+
}
|
|
56
|
+
]
|
|
57
|
+
```
|
|
58
|
+
|
|
59
|
+
### Claude Desktop での設定
|
|
60
|
+
|
|
61
|
+
- 名前: `paput`
|
|
62
|
+
- コマンド: `npx`
|
|
63
|
+
- 引数: `-y paput-mcp`
|
|
64
|
+
- 環境変数: `PAPUT_API_KEY=あなたのAPIキー`
|
|
65
|
+
|
|
66
|
+
## 使用方法
|
|
67
|
+
|
|
68
|
+
設定が完了したら、AI アシスタントにリクエストできます。
|
|
69
|
+
以下推奨する方法です。
|
|
70
|
+
|
|
71
|
+
1. 登録すべきメモを提示してもらう(推奨)
|
|
72
|
+
|
|
73
|
+
```
|
|
74
|
+
ここまでの開発をメモとして残したいです。
|
|
75
|
+
一つのメモが大きくなりすぎないように、最小の粒度で、タイトル、内容、カテゴリー(複数可)を提示してください。
|
|
76
|
+
```
|
|
77
|
+
|
|
78
|
+
2. メモ確認し問題がなかったら、登録する
|
|
79
|
+
|
|
80
|
+
```
|
|
81
|
+
提案された内容で、PaPut にメモを作成してください。
|
|
82
|
+
```
|
|
83
|
+
|
|
84
|
+
いきなり 2 の方法を実施すると、意図しないメモが登録されてしまう可能性があるため、1 の方法を挟んでからメモを登録することを推奨します。
|
|
@@ -0,0 +1,70 @@
|
|
|
1
|
+
export async function handleCreateMemo(args, apiService) {
|
|
2
|
+
if (!args) {
|
|
3
|
+
return {
|
|
4
|
+
content: [
|
|
5
|
+
{
|
|
6
|
+
type: 'text',
|
|
7
|
+
text: 'パラメータが不足しています',
|
|
8
|
+
},
|
|
9
|
+
],
|
|
10
|
+
isError: true,
|
|
11
|
+
};
|
|
12
|
+
}
|
|
13
|
+
// パラメータの検証
|
|
14
|
+
if (typeof args.title !== 'string' || typeof args.content !== 'string') {
|
|
15
|
+
return {
|
|
16
|
+
content: [
|
|
17
|
+
{
|
|
18
|
+
type: 'text',
|
|
19
|
+
text: 'タイトルと本文は文字列で指定してください',
|
|
20
|
+
},
|
|
21
|
+
],
|
|
22
|
+
isError: true,
|
|
23
|
+
};
|
|
24
|
+
}
|
|
25
|
+
// パラメータの構築
|
|
26
|
+
const params = {
|
|
27
|
+
title: args.title,
|
|
28
|
+
content: args.content,
|
|
29
|
+
is_public: typeof args.is_public === 'boolean' ? args.is_public : false,
|
|
30
|
+
};
|
|
31
|
+
// カテゴリの処理
|
|
32
|
+
if (Array.isArray(args.categories)) {
|
|
33
|
+
params.categories = args.categories.filter((item) => typeof item === 'string');
|
|
34
|
+
}
|
|
35
|
+
try {
|
|
36
|
+
const result = await apiService.createMemo(params);
|
|
37
|
+
if (!result.success) {
|
|
38
|
+
return {
|
|
39
|
+
content: [
|
|
40
|
+
{
|
|
41
|
+
type: 'text',
|
|
42
|
+
text: `メモの作成に失敗しました: ${result.error || '不明なエラー'}`,
|
|
43
|
+
},
|
|
44
|
+
],
|
|
45
|
+
isError: true,
|
|
46
|
+
};
|
|
47
|
+
}
|
|
48
|
+
return {
|
|
49
|
+
content: [
|
|
50
|
+
{
|
|
51
|
+
type: 'text',
|
|
52
|
+
text: `メモ「${params.title}」が正常に作成されました。`,
|
|
53
|
+
},
|
|
54
|
+
],
|
|
55
|
+
};
|
|
56
|
+
}
|
|
57
|
+
catch (error) {
|
|
58
|
+
const errorMessage = error instanceof Error ? error.message : '不明なエラー';
|
|
59
|
+
return {
|
|
60
|
+
content: [
|
|
61
|
+
{
|
|
62
|
+
type: 'text',
|
|
63
|
+
text: `メモの作成中にエラーが発生しました: ${errorMessage}`,
|
|
64
|
+
},
|
|
65
|
+
],
|
|
66
|
+
isError: true,
|
|
67
|
+
};
|
|
68
|
+
}
|
|
69
|
+
}
|
|
70
|
+
//# sourceMappingURL=create-memo.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"create-memo.js","sourceRoot":"","sources":["../../src/handlers/create-memo.ts"],"names":[],"mappings":"AAGA,MAAM,CAAC,KAAK,UAAU,gBAAgB,CACpC,IAAyC,EACzC,UAAsB;IAEtB,IAAI,CAAC,IAAI,EAAE,CAAC;QACV,OAAO;YACL,OAAO,EAAE;gBACP;oBACE,IAAI,EAAE,MAAM;oBACZ,IAAI,EAAE,eAAe;iBACtB;aACF;YACD,OAAO,EAAE,IAAI;SACd,CAAC;IACJ,CAAC;IAED,WAAW;IACX,IAAI,OAAO,IAAI,CAAC,KAAK,KAAK,QAAQ,IAAI,OAAO,IAAI,CAAC,OAAO,KAAK,QAAQ,EAAE,CAAC;QACvE,OAAO;YACL,OAAO,EAAE;gBACP;oBACE,IAAI,EAAE,MAAM;oBACZ,IAAI,EAAE,sBAAsB;iBAC7B;aACF;YACD,OAAO,EAAE,IAAI;SACd,CAAC;IACJ,CAAC;IAED,WAAW;IACX,MAAM,MAAM,GAAqB;QAC/B,KAAK,EAAE,IAAI,CAAC,KAAK;QACjB,OAAO,EAAE,IAAI,CAAC,OAAO;QACrB,SAAS,EAAE,OAAO,IAAI,CAAC,SAAS,KAAK,SAAS,CAAC,CAAC,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC,CAAC,KAAK;KACxE,CAAC;IAEF,UAAU;IACV,IAAI,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,UAAU,CAAC,EAAE,CAAC;QACnC,MAAM,CAAC,UAAU,GAAG,IAAI,CAAC,UAAU,CAAC,MAAM,CACxC,CAAC,IAAI,EAAkB,EAAE,CAAC,OAAO,IAAI,KAAK,QAAQ,CACnD,CAAC;IACJ,CAAC;IAED,IAAI,CAAC;QACH,MAAM,MAAM,GAAG,MAAM,UAAU,CAAC,UAAU,CAAC,MAAM,CAAC,CAAC;QAEnD,IAAI,CAAC,MAAM,CAAC,OAAO,EAAE,CAAC;YACpB,OAAO;gBACL,OAAO,EAAE;oBACP;wBACE,IAAI,EAAE,MAAM;wBACZ,IAAI,EAAE,iBAAiB,MAAM,CAAC,KAAK,IAAI,QAAQ,EAAE;qBAClD;iBACF;gBACD,OAAO,EAAE,IAAI;aACd,CAAC;QACJ,CAAC;QAED,OAAO;YACL,OAAO,EAAE;gBACP;oBACE,IAAI,EAAE,MAAM;oBACZ,IAAI,EAAE,MAAM,MAAM,CAAC,KAAK,eAAe;iBACxC;aACF;SACF,CAAC;IACJ,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,MAAM,YAAY,GAChB,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,QAAQ,CAAC;QAEpD,OAAO;YACL,OAAO,EAAE;gBACP;oBACE,IAAI,EAAE,MAAM;oBACZ,IAAI,EAAE,sBAAsB,YAAY,EAAE;iBAC3C;aACF;YACD,OAAO,EAAE,IAAI;SACd,CAAC;IACJ,CAAC;AACH,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/handlers/index.ts"],"names":[],"mappings":"AAAA,cAAc,kBAAkB,CAAC"}
|
package/dist/index.js
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";AAEA,OAAO,EAAE,SAAS,EAAE,MAAM,aAAa,CAAC;AAExC,UAAU;AACV,MAAM,MAAM,GAAG,IAAI,SAAS,EAAE,CAAC;AAC/B,MAAM,CAAC,GAAG,EAAE,CAAC,KAAK,CAAC,CAAC,KAAK,EAAE,EAAE;IAC3B,OAAO,CAAC,KAAK,CAAC,UAAU,EAAE,KAAK,CAAC,CAAC;IACjC,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;AAClB,CAAC,CAAC,CAAC"}
|
|
@@ -0,0 +1,210 @@
|
|
|
1
|
+
#!/usr/bin/env node
|
|
2
|
+
import { Server } from '@modelcontextprotocol/sdk/server/index.js';
|
|
3
|
+
import { StdioServerTransport } from '@modelcontextprotocol/sdk/server/stdio.js';
|
|
4
|
+
import {
|
|
5
|
+
CallToolRequestSchema,
|
|
6
|
+
ListToolsRequestSchema,
|
|
7
|
+
} from '@modelcontextprotocol/sdk/types.js';
|
|
8
|
+
import dotenv from 'dotenv';
|
|
9
|
+
// 環境変数の読み込み
|
|
10
|
+
dotenv.config();
|
|
11
|
+
// サーバークラス
|
|
12
|
+
class PaputServer {
|
|
13
|
+
server;
|
|
14
|
+
// コンストラクタ
|
|
15
|
+
constructor() {
|
|
16
|
+
// 環境変数からAPIキーを取得
|
|
17
|
+
const apiKey = process.env.PAPUT_API_KEY;
|
|
18
|
+
const apiUrl = process.env.PAPUT_API_URL ?? 'http://localhost:8080';
|
|
19
|
+
if (!apiKey) {
|
|
20
|
+
throw new Error('PAPUT_API_KEY environment variable is not set');
|
|
21
|
+
}
|
|
22
|
+
// サーバーインスタンスの作成
|
|
23
|
+
this.server = new Server(
|
|
24
|
+
{
|
|
25
|
+
name: 'paput-mcp',
|
|
26
|
+
version: '1.0.0',
|
|
27
|
+
},
|
|
28
|
+
{
|
|
29
|
+
capabilities: {
|
|
30
|
+
tools: {},
|
|
31
|
+
},
|
|
32
|
+
},
|
|
33
|
+
);
|
|
34
|
+
this.setupHandlers(apiUrl, apiKey);
|
|
35
|
+
this.setupErrorHandling();
|
|
36
|
+
}
|
|
37
|
+
// エラーハンドリングのセットアップ
|
|
38
|
+
setupErrorHandling() {
|
|
39
|
+
this.server.onerror = (error) => {
|
|
40
|
+
console.error('[MCP Error]', error);
|
|
41
|
+
};
|
|
42
|
+
process.on('SIGINT', async () => {
|
|
43
|
+
await this.server.close();
|
|
44
|
+
process.exit(0);
|
|
45
|
+
});
|
|
46
|
+
}
|
|
47
|
+
// ハンドラーのセットアップ
|
|
48
|
+
setupHandlers(apiUrl, apiKey) {
|
|
49
|
+
// 利用可能なツール一覧の取得
|
|
50
|
+
this.server.setRequestHandler(ListToolsRequestSchema, async () => ({
|
|
51
|
+
tools: [
|
|
52
|
+
{
|
|
53
|
+
name: 'paput_create_memo',
|
|
54
|
+
description: 'PaPut にメモを作成します',
|
|
55
|
+
inputSchema: {
|
|
56
|
+
type: 'object',
|
|
57
|
+
properties: {
|
|
58
|
+
title: {
|
|
59
|
+
type: 'string',
|
|
60
|
+
description: 'メモのタイトル',
|
|
61
|
+
},
|
|
62
|
+
content: {
|
|
63
|
+
type: 'string',
|
|
64
|
+
description: 'メモの内容',
|
|
65
|
+
},
|
|
66
|
+
is_public: {
|
|
67
|
+
type: 'boolean',
|
|
68
|
+
description: 'メモを公開するかどうか',
|
|
69
|
+
default: false,
|
|
70
|
+
},
|
|
71
|
+
categories: {
|
|
72
|
+
type: 'array',
|
|
73
|
+
items: {
|
|
74
|
+
type: 'string',
|
|
75
|
+
},
|
|
76
|
+
description: 'メモのカテゴリ',
|
|
77
|
+
},
|
|
78
|
+
},
|
|
79
|
+
required: ['title', 'content'],
|
|
80
|
+
},
|
|
81
|
+
},
|
|
82
|
+
],
|
|
83
|
+
}));
|
|
84
|
+
// ツールの呼び出し
|
|
85
|
+
this.server.setRequestHandler(CallToolRequestSchema, async (request) => {
|
|
86
|
+
// ツール名のチェック
|
|
87
|
+
if (request.params.name !== 'paput_create_memo') {
|
|
88
|
+
return {
|
|
89
|
+
content: [
|
|
90
|
+
{
|
|
91
|
+
type: 'text',
|
|
92
|
+
text: `未知のツールです: ${request.params.name}`,
|
|
93
|
+
},
|
|
94
|
+
],
|
|
95
|
+
isError: true,
|
|
96
|
+
};
|
|
97
|
+
}
|
|
98
|
+
// パラメータのチェックと型変換
|
|
99
|
+
if (!request.params.arguments) {
|
|
100
|
+
return {
|
|
101
|
+
content: [
|
|
102
|
+
{
|
|
103
|
+
type: 'text',
|
|
104
|
+
text: 'パラメータが不足しています',
|
|
105
|
+
},
|
|
106
|
+
],
|
|
107
|
+
isError: true,
|
|
108
|
+
};
|
|
109
|
+
}
|
|
110
|
+
// 安全な型変換
|
|
111
|
+
const args = request.params.arguments;
|
|
112
|
+
// 必須パラメータのチェック
|
|
113
|
+
if (typeof args.title !== 'string' || typeof args.content !== 'string') {
|
|
114
|
+
return {
|
|
115
|
+
content: [
|
|
116
|
+
{
|
|
117
|
+
type: 'text',
|
|
118
|
+
text: 'タイトルと本文は文字列で指定してください',
|
|
119
|
+
},
|
|
120
|
+
],
|
|
121
|
+
isError: true,
|
|
122
|
+
};
|
|
123
|
+
}
|
|
124
|
+
// パラメータの構築
|
|
125
|
+
const params = {
|
|
126
|
+
title: args.title,
|
|
127
|
+
content: args.content,
|
|
128
|
+
is_public: typeof args.is_public === 'boolean' ? args.is_public : false,
|
|
129
|
+
};
|
|
130
|
+
// カテゴリの処理
|
|
131
|
+
if (Array.isArray(args.categories)) {
|
|
132
|
+
params.categories = args.categories.filter(
|
|
133
|
+
(item) => typeof item === 'string',
|
|
134
|
+
);
|
|
135
|
+
}
|
|
136
|
+
try {
|
|
137
|
+
const response = await fetch(`${apiUrl}/api/v1/mcp/memo`, {
|
|
138
|
+
method: 'POST',
|
|
139
|
+
headers: {
|
|
140
|
+
'Content-Type': 'application/json',
|
|
141
|
+
'X-API-Key': apiKey,
|
|
142
|
+
},
|
|
143
|
+
body: JSON.stringify({
|
|
144
|
+
title: params.title,
|
|
145
|
+
content: params.content,
|
|
146
|
+
is_public: params.is_public || false,
|
|
147
|
+
categories: (params.categories || []).map((name) => ({ name })),
|
|
148
|
+
}),
|
|
149
|
+
});
|
|
150
|
+
const responseText = await response.text();
|
|
151
|
+
let data;
|
|
152
|
+
try {
|
|
153
|
+
data = JSON.parse(responseText);
|
|
154
|
+
} catch (e) {
|
|
155
|
+
console.error(`JSONパースエラー: ${e.message}`);
|
|
156
|
+
data = {
|
|
157
|
+
success: false,
|
|
158
|
+
message: 'レスポンスのJSONパースに失敗しました',
|
|
159
|
+
};
|
|
160
|
+
}
|
|
161
|
+
if (!response.ok) {
|
|
162
|
+
return {
|
|
163
|
+
content: [
|
|
164
|
+
{
|
|
165
|
+
type: 'text',
|
|
166
|
+
text: `メモの作成に失敗しました: ${data.message || '不明なエラー'}`,
|
|
167
|
+
},
|
|
168
|
+
],
|
|
169
|
+
isError: true,
|
|
170
|
+
};
|
|
171
|
+
}
|
|
172
|
+
return {
|
|
173
|
+
content: [
|
|
174
|
+
{
|
|
175
|
+
type: 'text',
|
|
176
|
+
text: `メモ「${params.title}」が正常に作成されました。`,
|
|
177
|
+
},
|
|
178
|
+
],
|
|
179
|
+
};
|
|
180
|
+
} catch (error) {
|
|
181
|
+
const errorMessage =
|
|
182
|
+
error instanceof Error ? error.message : '不明なエラー';
|
|
183
|
+
return {
|
|
184
|
+
content: [
|
|
185
|
+
{
|
|
186
|
+
type: 'text',
|
|
187
|
+
text: `メモの作成中にエラーが発生しました: ${errorMessage}`,
|
|
188
|
+
},
|
|
189
|
+
],
|
|
190
|
+
isError: true,
|
|
191
|
+
};
|
|
192
|
+
}
|
|
193
|
+
});
|
|
194
|
+
}
|
|
195
|
+
// サーバーの実行
|
|
196
|
+
async run() {
|
|
197
|
+
const transport = new StdioServerTransport();
|
|
198
|
+
transport.onerror = (error) => {
|
|
199
|
+
console.error(`MCPエラー発生: ${error}`);
|
|
200
|
+
};
|
|
201
|
+
await this.server.connect(transport);
|
|
202
|
+
}
|
|
203
|
+
}
|
|
204
|
+
// サーバーの実行
|
|
205
|
+
const server = new PaputServer();
|
|
206
|
+
server.run().catch((error) => {
|
|
207
|
+
console.error('予期せぬエラー:', error);
|
|
208
|
+
process.exit(1);
|
|
209
|
+
});
|
|
210
|
+
//# sourceMappingURL=old-index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"old-index.js","sourceRoot":"","sources":["../src/old-index.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,38 @@
|
|
|
1
|
+
import { Server } from '@modelcontextprotocol/sdk/server/index.js';
|
|
2
|
+
import { StdioServerTransport } from '@modelcontextprotocol/sdk/server/stdio.js';
|
|
3
|
+
import { setupMemoTool } from '../tools/memo.js';
|
|
4
|
+
import { setupErrorHandling } from '../utils/error-handler.js';
|
|
5
|
+
export class PaputServer {
|
|
6
|
+
server;
|
|
7
|
+
constructor() {
|
|
8
|
+
// 環境変数の取得
|
|
9
|
+
const apiKey = process.env.PAPUT_API_KEY;
|
|
10
|
+
const apiUrl = process.env.PAPUT_API_URL ?? 'http://localhost:8080';
|
|
11
|
+
if (!apiKey) {
|
|
12
|
+
throw new Error('PAPUT_API_KEY environment variable is not set');
|
|
13
|
+
}
|
|
14
|
+
// サーバーの初期化
|
|
15
|
+
this.server = new Server(
|
|
16
|
+
{
|
|
17
|
+
name: 'paput-mcp',
|
|
18
|
+
version: '1.0.0',
|
|
19
|
+
},
|
|
20
|
+
{
|
|
21
|
+
capabilities: {
|
|
22
|
+
tools: {},
|
|
23
|
+
},
|
|
24
|
+
},
|
|
25
|
+
);
|
|
26
|
+
// ツールとエラーハンドリングのセットアップ
|
|
27
|
+
setupMemoTool(this.server, apiUrl, apiKey);
|
|
28
|
+
setupErrorHandling(this.server);
|
|
29
|
+
}
|
|
30
|
+
async run() {
|
|
31
|
+
const transport = new StdioServerTransport();
|
|
32
|
+
transport.onerror = (error) => {
|
|
33
|
+
console.error(`MCPエラー発生: ${error}`);
|
|
34
|
+
};
|
|
35
|
+
await this.server.connect(transport);
|
|
36
|
+
}
|
|
37
|
+
}
|
|
38
|
+
//# sourceMappingURL=paput-server.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"paput-server.js","sourceRoot":"","sources":["../../src/server/paput-server.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAE,MAAM,2CAA2C,CAAC;AACnE,OAAO,EAAE,oBAAoB,EAAE,MAAM,2CAA2C,CAAC;AACjF,OAAO,EAAE,aAAa,EAAE,MAAM,kBAAkB,CAAC;AACjD,OAAO,EAAE,kBAAkB,EAAE,MAAM,2BAA2B,CAAC;AAE/D,MAAM,OAAO,WAAW;IACd,MAAM,CAAS;IAEvB;QACE,UAAU;QACV,MAAM,MAAM,GAAG,OAAO,CAAC,GAAG,CAAC,aAAa,CAAC;QACzC,MAAM,MAAM,GAAG,OAAO,CAAC,GAAG,CAAC,aAAa,IAAI,uBAAuB,CAAC;QAEpE,IAAI,CAAC,MAAM,EAAE,CAAC;YACZ,MAAM,IAAI,KAAK,CAAC,+CAA+C,CAAC,CAAC;QACnE,CAAC;QAED,WAAW;QACX,IAAI,CAAC,MAAM,GAAG,IAAI,MAAM,CAAC;YACvB,IAAI,EAAE,WAAW;YACjB,OAAO,EAAE,OAAO;SACjB,EAAE;YACD,YAAY,EAAE;gBACZ,KAAK,EAAE,EAAE;aACV;SACF,CAAC,CAAC;QAEH,uBAAuB;QACvB,aAAa,CAAC,IAAI,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,CAAC,CAAC;QAC3C,kBAAkB,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;IAClC,CAAC;IAED,KAAK,CAAC,GAAG;QACP,MAAM,SAAS,GAAG,IAAI,oBAAoB,EAAE,CAAC;QAE7C,SAAS,CAAC,OAAO,GAAG,CAAC,KAAU,EAAE,EAAE;YACjC,OAAO,CAAC,KAAK,CAAC,aAAa,KAAK,EAAE,CAAC,CAAC;QACtC,CAAC,CAAC;QAEF,MAAM,IAAI,CAAC,MAAM,CAAC,OAAO,CAAC,SAAS,CAAC,CAAC;IACvC,CAAC;CACF"}
|
package/dist/server.js
ADDED
|
@@ -0,0 +1,35 @@
|
|
|
1
|
+
import { Server } from '@modelcontextprotocol/sdk/server/index.js';
|
|
2
|
+
import { StdioServerTransport } from '@modelcontextprotocol/sdk/server/stdio.js';
|
|
3
|
+
import { setupTool } from './tool.js';
|
|
4
|
+
import { setupErrorHandling } from './utils/error-handler.js';
|
|
5
|
+
export class MCPServer {
|
|
6
|
+
server;
|
|
7
|
+
constructor() {
|
|
8
|
+
// 環境変数の取得
|
|
9
|
+
const apiKey = process.env.PAPUT_API_KEY;
|
|
10
|
+
const apiUrl = process.env.PAPUT_API_URL ?? 'https://api.paput.io';
|
|
11
|
+
if (!apiKey) {
|
|
12
|
+
throw new Error('PAPUT_API_KEY environment variable is not set');
|
|
13
|
+
}
|
|
14
|
+
// サーバーの初期化
|
|
15
|
+
this.server = new Server({
|
|
16
|
+
name: 'paput-mcp',
|
|
17
|
+
version: '1.0.0',
|
|
18
|
+
}, {
|
|
19
|
+
capabilities: {
|
|
20
|
+
tools: {},
|
|
21
|
+
},
|
|
22
|
+
});
|
|
23
|
+
// ツールとエラーハンドリングのセットアップ
|
|
24
|
+
setupTool(this.server, apiUrl, apiKey);
|
|
25
|
+
setupErrorHandling(this.server);
|
|
26
|
+
}
|
|
27
|
+
async run() {
|
|
28
|
+
const transport = new StdioServerTransport();
|
|
29
|
+
transport.onerror = (error) => {
|
|
30
|
+
console.error(`MCPエラー発生: ${error}`);
|
|
31
|
+
};
|
|
32
|
+
await this.server.connect(transport);
|
|
33
|
+
}
|
|
34
|
+
}
|
|
35
|
+
//# sourceMappingURL=server.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"server.js","sourceRoot":"","sources":["../src/server.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAE,MAAM,2CAA2C,CAAC;AACnE,OAAO,EAAE,oBAAoB,EAAE,MAAM,2CAA2C,CAAC;AACjF,OAAO,EAAE,SAAS,EAAE,MAAM,WAAW,CAAC;AACtC,OAAO,EAAE,kBAAkB,EAAE,MAAM,0BAA0B,CAAC;AAE9D,MAAM,OAAO,SAAS;IACZ,MAAM,CAAS;IAEvB;QACE,UAAU;QACV,MAAM,MAAM,GAAG,OAAO,CAAC,GAAG,CAAC,aAAa,CAAC;QACzC,MAAM,MAAM,GAAG,OAAO,CAAC,GAAG,CAAC,aAAa,IAAI,sBAAsB,CAAC;QAEnE,IAAI,CAAC,MAAM,EAAE,CAAC;YACZ,MAAM,IAAI,KAAK,CAAC,+CAA+C,CAAC,CAAC;QACnE,CAAC;QAED,WAAW;QACX,IAAI,CAAC,MAAM,GAAG,IAAI,MAAM,CACtB;YACE,IAAI,EAAE,WAAW;YACjB,OAAO,EAAE,OAAO;SACjB,EACD;YACE,YAAY,EAAE;gBACZ,KAAK,EAAE,EAAE;aACV;SACF,CACF,CAAC;QAEF,uBAAuB;QACvB,SAAS,CAAC,IAAI,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,CAAC,CAAC;QACvC,kBAAkB,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;IAClC,CAAC;IAED,KAAK,CAAC,GAAG;QACP,MAAM,SAAS,GAAG,IAAI,oBAAoB,EAAE,CAAC;QAE7C,SAAS,CAAC,OAAO,GAAG,CAAC,KAAU,EAAE,EAAE;YACjC,OAAO,CAAC,KAAK,CAAC,aAAa,KAAK,EAAE,CAAC,CAAC;QACtC,CAAC,CAAC;QAEF,MAAM,IAAI,CAAC,MAAM,CAAC,OAAO,CAAC,SAAS,CAAC,CAAC;IACvC,CAAC;CACF"}
|
|
@@ -0,0 +1,44 @@
|
|
|
1
|
+
export class ApiService {
|
|
2
|
+
apiUrl;
|
|
3
|
+
apiKey;
|
|
4
|
+
constructor(apiUrl, apiKey) {
|
|
5
|
+
this.apiUrl = apiUrl;
|
|
6
|
+
this.apiKey = apiKey;
|
|
7
|
+
}
|
|
8
|
+
async createMemo(params) {
|
|
9
|
+
try {
|
|
10
|
+
const response = await fetch(`${this.apiUrl}/api/v1/mcp/memo`, {
|
|
11
|
+
method: 'POST',
|
|
12
|
+
headers: {
|
|
13
|
+
'Content-Type': 'application/json',
|
|
14
|
+
'X-API-Key': this.apiKey,
|
|
15
|
+
},
|
|
16
|
+
body: JSON.stringify({
|
|
17
|
+
title: params.title,
|
|
18
|
+
content: params.content,
|
|
19
|
+
is_public: params.is_public || false,
|
|
20
|
+
categories: (params.categories || []).map((name) => ({
|
|
21
|
+
name,
|
|
22
|
+
})),
|
|
23
|
+
}),
|
|
24
|
+
});
|
|
25
|
+
const data = await response.json();
|
|
26
|
+
if (!response.ok) {
|
|
27
|
+
return {
|
|
28
|
+
success: false,
|
|
29
|
+
error: data.error || '不明なエラー',
|
|
30
|
+
};
|
|
31
|
+
}
|
|
32
|
+
return {
|
|
33
|
+
success: true,
|
|
34
|
+
};
|
|
35
|
+
}
|
|
36
|
+
catch (error) {
|
|
37
|
+
return {
|
|
38
|
+
success: false,
|
|
39
|
+
error: error instanceof Error ? error.message : '不明なエラー',
|
|
40
|
+
};
|
|
41
|
+
}
|
|
42
|
+
}
|
|
43
|
+
}
|
|
44
|
+
//# sourceMappingURL=api-service.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"api-service.js","sourceRoot":"","sources":["../../src/services/api-service.ts"],"names":[],"mappings":"AAEA,MAAM,OAAO,UAAU;IACb,MAAM,CAAS;IACf,MAAM,CAAS;IAEvB,YAAY,MAAc,EAAE,MAAc;QACxC,IAAI,CAAC,MAAM,GAAG,MAAM,CAAC;QACrB,IAAI,CAAC,MAAM,GAAG,MAAM,CAAC;IACvB,CAAC;IAED,KAAK,CAAC,UAAU,CAAC,MAAwB;QACvC,IAAI,CAAC;YACH,MAAM,QAAQ,GAAG,MAAM,KAAK,CAAC,GAAG,IAAI,CAAC,MAAM,kBAAkB,EAAE;gBAC7D,MAAM,EAAE,MAAM;gBACd,OAAO,EAAE;oBACP,cAAc,EAAE,kBAAkB;oBAClC,WAAW,EAAE,IAAI,CAAC,MAAM;iBACzB;gBACD,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC;oBACnB,KAAK,EAAE,MAAM,CAAC,KAAK;oBACnB,OAAO,EAAE,MAAM,CAAC,OAAO;oBACvB,SAAS,EAAE,MAAM,CAAC,SAAS,IAAI,KAAK;oBACpC,UAAU,EAAE,CAAC,MAAM,CAAC,UAAU,IAAI,EAAE,CAAC,CAAC,GAAG,CAAC,CAAC,IAAY,EAAE,EAAE,CAAC,CAAC;wBAC3D,IAAI;qBACL,CAAC,CAAC;iBACJ,CAAC;aACH,CAAC,CAAC;YAEH,MAAM,IAAI,GAAG,MAAM,QAAQ,CAAC,IAAI,EAAE,CAAC;YAEnC,IAAI,CAAC,QAAQ,CAAC,EAAE,EAAE,CAAC;gBACjB,OAAO;oBACL,OAAO,EAAE,KAAK;oBACd,KAAK,EAAE,IAAI,CAAC,KAAK,IAAI,QAAQ;iBAC9B,CAAC;YACJ,CAAC;YAED,OAAO;gBACL,OAAO,EAAE,IAAI;aACd,CAAC;QACJ,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,OAAO;gBACL,OAAO,EAAE,KAAK;gBACd,KAAK,EAAE,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,QAAQ;aACzD,CAAC;QACJ,CAAC;IACH,CAAC;CACF"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/services/index.ts"],"names":[],"mappings":"AAAA,cAAc,kBAAkB,CAAC"}
|
|
@@ -0,0 +1,45 @@
|
|
|
1
|
+
import { getConfig } from '../utils/config';
|
|
2
|
+
import { logger } from '../utils/logger';
|
|
3
|
+
export class PaputApiService {
|
|
4
|
+
baseUrl;
|
|
5
|
+
apiKey;
|
|
6
|
+
constructor() {
|
|
7
|
+
const config = getConfig();
|
|
8
|
+
this.baseUrl = config.paputApiUrl;
|
|
9
|
+
this.apiKey = config.paputApiKey;
|
|
10
|
+
}
|
|
11
|
+
async createMemo(request) {
|
|
12
|
+
try {
|
|
13
|
+
logger.info(`メモ作成リクエスト: ${request.title}`);
|
|
14
|
+
const response = await fetch(`${this.baseUrl}/api/v1/mcp/memo`, {
|
|
15
|
+
method: 'POST',
|
|
16
|
+
headers: {
|
|
17
|
+
'Content-Type': 'application/json',
|
|
18
|
+
'X-API-Key': this.apiKey,
|
|
19
|
+
},
|
|
20
|
+
body: JSON.stringify(request),
|
|
21
|
+
});
|
|
22
|
+
const data = await response.json();
|
|
23
|
+
if (!response.ok) {
|
|
24
|
+
logger.error(`API エラー: ${response.status} ${response.statusText}`);
|
|
25
|
+
return {
|
|
26
|
+
success: false,
|
|
27
|
+
message:
|
|
28
|
+
data.message ||
|
|
29
|
+
`API エラー: ${response.status} ${response.statusText}`,
|
|
30
|
+
};
|
|
31
|
+
}
|
|
32
|
+
logger.info(`メモ作成成功: ${request.title}`);
|
|
33
|
+
return data;
|
|
34
|
+
} catch (error) {
|
|
35
|
+
const errorMessage =
|
|
36
|
+
error instanceof Error ? error.message : '不明なエラーが発生しました';
|
|
37
|
+
logger.error(`メモ作成エラー: ${errorMessage}`);
|
|
38
|
+
return {
|
|
39
|
+
success: false,
|
|
40
|
+
message: errorMessage,
|
|
41
|
+
};
|
|
42
|
+
}
|
|
43
|
+
}
|
|
44
|
+
}
|
|
45
|
+
//# sourceMappingURL=paput-api.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"paput-api.js","sourceRoot":"","sources":["../../src/services/paput-api.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,SAAS,EAAE,MAAM,iBAAiB,CAAC;AAC5C,OAAO,EAAE,MAAM,EAAE,MAAM,iBAAiB,CAAC;AAEzC,MAAM,OAAO,eAAe;IAClB,OAAO,CAAS;IAChB,MAAM,CAAS;IAEvB;QACE,MAAM,MAAM,GAAG,SAAS,EAAE,CAAC;QAC3B,IAAI,CAAC,OAAO,GAAG,MAAM,CAAC,WAAW,CAAC;QAClC,IAAI,CAAC,MAAM,GAAG,MAAM,CAAC,WAAW,CAAC;IACnC,CAAC;IAED,KAAK,CAAC,UAAU,CAAC,OAAiC;QAChD,IAAI,CAAC;YACH,MAAM,CAAC,IAAI,CAAC,cAAc,OAAO,CAAC,KAAK,EAAE,CAAC,CAAC;YAE3C,MAAM,QAAQ,GAAG,MAAM,KAAK,CAAC,GAAG,IAAI,CAAC,OAAO,kBAAkB,EAAE;gBAC9D,MAAM,EAAE,MAAM;gBACd,OAAO,EAAE;oBACP,cAAc,EAAE,kBAAkB;oBAClC,WAAW,EAAE,IAAI,CAAC,MAAM;iBACzB;gBACD,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC,OAAO,CAAC;aAC9B,CAAC,CAAC;YAEH,MAAM,IAAI,GAAG,MAAM,QAAQ,CAAC,IAAI,EAAsB,CAAC;YAEvD,IAAI,CAAC,QAAQ,CAAC,EAAE,EAAE,CAAC;gBACjB,MAAM,CAAC,KAAK,CAAC,YAAY,QAAQ,CAAC,MAAM,IAAI,QAAQ,CAAC,UAAU,EAAE,CAAC,CAAC;gBACnE,OAAO;oBACL,OAAO,EAAE,KAAK;oBACd,OAAO,EAAE,IAAI,CAAC,OAAO,IAAI,YAAY,QAAQ,CAAC,MAAM,IAAI,QAAQ,CAAC,UAAU,EAAE;iBAC9E,CAAC;YACJ,CAAC;YAED,MAAM,CAAC,IAAI,CAAC,WAAW,OAAO,CAAC,KAAK,EAAE,CAAC,CAAC;YACxC,OAAO,IAAI,CAAC;QACd,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,MAAM,YAAY,GAAG,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,eAAe,CAAC;YAC9E,MAAM,CAAC,KAAK,CAAC,YAAY,YAAY,EAAE,CAAC,CAAC;YAEzC,OAAO;gBACL,OAAO,EAAE,KAAK;gBACd,OAAO,EAAE,YAAY;aACtB,CAAC;QACJ,CAAC;IACH,CAAC;CACF"}
|
package/dist/tool.js
ADDED
|
@@ -0,0 +1,57 @@
|
|
|
1
|
+
import { CallToolRequestSchema, ListToolsRequestSchema, } from '@modelcontextprotocol/sdk/types.js';
|
|
2
|
+
import { ApiService } from './services/api-service.js';
|
|
3
|
+
import { handleCreateMemo } from './handlers/index.js';
|
|
4
|
+
export function setupTool(server, apiUrl, apiKey) {
|
|
5
|
+
const apiService = new ApiService(apiUrl, apiKey);
|
|
6
|
+
server.setRequestHandler(ListToolsRequestSchema, async () => ({
|
|
7
|
+
tools: [
|
|
8
|
+
{
|
|
9
|
+
name: 'paput_create_memo',
|
|
10
|
+
description: 'PaPut にメモを作成します',
|
|
11
|
+
inputSchema: {
|
|
12
|
+
type: 'object',
|
|
13
|
+
properties: {
|
|
14
|
+
title: {
|
|
15
|
+
type: 'string',
|
|
16
|
+
description: 'メモのタイトル',
|
|
17
|
+
},
|
|
18
|
+
content: {
|
|
19
|
+
type: 'string',
|
|
20
|
+
description: 'メモの内容',
|
|
21
|
+
},
|
|
22
|
+
is_public: {
|
|
23
|
+
type: 'boolean',
|
|
24
|
+
description: 'メモを公開するかどうか',
|
|
25
|
+
default: false,
|
|
26
|
+
},
|
|
27
|
+
categories: {
|
|
28
|
+
type: 'array',
|
|
29
|
+
items: {
|
|
30
|
+
type: 'string',
|
|
31
|
+
},
|
|
32
|
+
description: 'メモのカテゴリ',
|
|
33
|
+
},
|
|
34
|
+
},
|
|
35
|
+
required: ['title', 'content'],
|
|
36
|
+
},
|
|
37
|
+
},
|
|
38
|
+
],
|
|
39
|
+
}));
|
|
40
|
+
server.setRequestHandler(CallToolRequestSchema, async (request) => {
|
|
41
|
+
switch (request.params.name) {
|
|
42
|
+
case 'paput_create_memo':
|
|
43
|
+
return await handleCreateMemo(request.params.arguments, apiService);
|
|
44
|
+
default:
|
|
45
|
+
return {
|
|
46
|
+
content: [
|
|
47
|
+
{
|
|
48
|
+
type: 'text',
|
|
49
|
+
text: `未知のツールです: ${request.params.name}`,
|
|
50
|
+
},
|
|
51
|
+
],
|
|
52
|
+
isError: true,
|
|
53
|
+
};
|
|
54
|
+
}
|
|
55
|
+
});
|
|
56
|
+
}
|
|
57
|
+
//# sourceMappingURL=tool.js.map
|
package/dist/tool.js.map
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"tool.js","sourceRoot":"","sources":["../src/tool.ts"],"names":[],"mappings":"AACA,OAAO,EACL,qBAAqB,EACrB,sBAAsB,GACvB,MAAM,oCAAoC,CAAC;AAC5C,OAAO,EAAE,UAAU,EAAE,MAAM,2BAA2B,CAAC;AACvD,OAAO,EAAE,gBAAgB,EAAE,MAAM,qBAAqB,CAAC;AAEvD,MAAM,UAAU,SAAS,CACvB,MAAc,EACd,MAAc,EACd,MAAc;IAEd,MAAM,UAAU,GAAG,IAAI,UAAU,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IAElD,MAAM,CAAC,iBAAiB,CAAC,sBAAsB,EAAE,KAAK,IAAI,EAAE,CAAC,CAAC;QAC5D,KAAK,EAAE;YACL;gBACE,IAAI,EAAE,mBAAmB;gBACzB,WAAW,EAAE,iBAAiB;gBAC9B,WAAW,EAAE;oBACX,IAAI,EAAE,QAAQ;oBACd,UAAU,EAAE;wBACV,KAAK,EAAE;4BACL,IAAI,EAAE,QAAQ;4BACd,WAAW,EAAE,SAAS;yBACvB;wBACD,OAAO,EAAE;4BACP,IAAI,EAAE,QAAQ;4BACd,WAAW,EAAE,OAAO;yBACrB;wBACD,SAAS,EAAE;4BACT,IAAI,EAAE,SAAS;4BACf,WAAW,EAAE,aAAa;4BAC1B,OAAO,EAAE,KAAK;yBACf;wBACD,UAAU,EAAE;4BACV,IAAI,EAAE,OAAO;4BACb,KAAK,EAAE;gCACL,IAAI,EAAE,QAAQ;6BACf;4BACD,WAAW,EAAE,SAAS;yBACvB;qBACF;oBACD,QAAQ,EAAE,CAAC,OAAO,EAAE,SAAS,CAAC;iBAC/B;aACF;SACF;KACF,CAAC,CAAC,CAAC;IAEJ,MAAM,CAAC,iBAAiB,CAAC,qBAAqB,EAAE,KAAK,EAAE,OAAO,EAAE,EAAE;QAChE,QAAQ,OAAO,CAAC,MAAM,CAAC,IAAI,EAAE,CAAC;YAC5B,KAAK,mBAAmB;gBACtB,OAAO,MAAM,gBAAgB,CAAC,OAAO,CAAC,MAAM,CAAC,SAAS,EAAE,UAAU,CAAC,CAAC;YACtE;gBACE,OAAO;oBACL,OAAO,EAAE;wBACP;4BACE,IAAI,EAAE,MAAM;4BACZ,IAAI,EAAE,aAAa,OAAO,CAAC,MAAM,CAAC,IAAI,EAAE;yBACzC;qBACF;oBACD,OAAO,EAAE,IAAI;iBACd,CAAC;QACN,CAAC;IACH,CAAC,CAAC,CAAC;AACL,CAAC"}
|
|
@@ -0,0 +1,134 @@
|
|
|
1
|
+
import {
|
|
2
|
+
CallToolRequestSchema,
|
|
3
|
+
ListToolsRequestSchema,
|
|
4
|
+
} from '@modelcontextprotocol/sdk/types.js';
|
|
5
|
+
import { ApiService } from '../services/api-service.js';
|
|
6
|
+
export function setupMemoTool(server, apiUrl, apiKey) {
|
|
7
|
+
const apiService = new ApiService(apiUrl, apiKey);
|
|
8
|
+
// ツール一覧の取得ハンドラー
|
|
9
|
+
server.setRequestHandler(ListToolsRequestSchema, async () => ({
|
|
10
|
+
tools: [
|
|
11
|
+
{
|
|
12
|
+
name: 'paput_create_memo',
|
|
13
|
+
description: 'PaPut にメモを作成します',
|
|
14
|
+
inputSchema: {
|
|
15
|
+
type: 'object',
|
|
16
|
+
properties: {
|
|
17
|
+
title: {
|
|
18
|
+
type: 'string',
|
|
19
|
+
description: 'メモのタイトル',
|
|
20
|
+
},
|
|
21
|
+
content: {
|
|
22
|
+
type: 'string',
|
|
23
|
+
description: 'メモの内容',
|
|
24
|
+
},
|
|
25
|
+
is_public: {
|
|
26
|
+
type: 'boolean',
|
|
27
|
+
description: 'メモを公開するかどうか',
|
|
28
|
+
default: false,
|
|
29
|
+
},
|
|
30
|
+
categories: {
|
|
31
|
+
type: 'array',
|
|
32
|
+
items: {
|
|
33
|
+
type: 'string',
|
|
34
|
+
},
|
|
35
|
+
description: 'メモのカテゴリ',
|
|
36
|
+
},
|
|
37
|
+
},
|
|
38
|
+
required: ['title', 'content'],
|
|
39
|
+
},
|
|
40
|
+
},
|
|
41
|
+
],
|
|
42
|
+
}));
|
|
43
|
+
// ツール呼び出しハンドラー
|
|
44
|
+
server.setRequestHandler(CallToolRequestSchema, async (request) => {
|
|
45
|
+
// ツール名のチェック
|
|
46
|
+
if (request.params.name !== 'paput_create_memo') {
|
|
47
|
+
return {
|
|
48
|
+
content: [
|
|
49
|
+
{
|
|
50
|
+
type: 'text',
|
|
51
|
+
text: `未知のツールです: ${request.params.name}`,
|
|
52
|
+
},
|
|
53
|
+
],
|
|
54
|
+
isError: true,
|
|
55
|
+
};
|
|
56
|
+
}
|
|
57
|
+
// パラメータの検証と変換
|
|
58
|
+
const result = await handleCreateMemo(request.params.arguments, apiService);
|
|
59
|
+
return result;
|
|
60
|
+
});
|
|
61
|
+
}
|
|
62
|
+
async function handleCreateMemo(args, apiService) {
|
|
63
|
+
if (!args) {
|
|
64
|
+
return {
|
|
65
|
+
content: [
|
|
66
|
+
{
|
|
67
|
+
type: 'text',
|
|
68
|
+
text: 'パラメータが不足しています',
|
|
69
|
+
},
|
|
70
|
+
],
|
|
71
|
+
isError: true,
|
|
72
|
+
};
|
|
73
|
+
}
|
|
74
|
+
// パラメータの検証
|
|
75
|
+
if (typeof args.title !== 'string' || typeof args.content !== 'string') {
|
|
76
|
+
return {
|
|
77
|
+
content: [
|
|
78
|
+
{
|
|
79
|
+
type: 'text',
|
|
80
|
+
text: 'タイトルと本文は文字列で指定してください',
|
|
81
|
+
},
|
|
82
|
+
],
|
|
83
|
+
isError: true,
|
|
84
|
+
};
|
|
85
|
+
}
|
|
86
|
+
// パラメータの構築
|
|
87
|
+
const params = {
|
|
88
|
+
title: args.title,
|
|
89
|
+
content: args.content,
|
|
90
|
+
is_public: typeof args.is_public === 'boolean' ? args.is_public : false,
|
|
91
|
+
};
|
|
92
|
+
// カテゴリの処理
|
|
93
|
+
if (Array.isArray(args.categories)) {
|
|
94
|
+
params.categories = args.categories.filter(
|
|
95
|
+
(item) => typeof item === 'string',
|
|
96
|
+
);
|
|
97
|
+
}
|
|
98
|
+
try {
|
|
99
|
+
// メモの作成
|
|
100
|
+
const result = await apiService.createMemo(params);
|
|
101
|
+
if (!result.success) {
|
|
102
|
+
return {
|
|
103
|
+
content: [
|
|
104
|
+
{
|
|
105
|
+
type: 'text',
|
|
106
|
+
text: `メモの作成に失敗しました: ${result.message || '不明なエラー'}`,
|
|
107
|
+
},
|
|
108
|
+
],
|
|
109
|
+
isError: true,
|
|
110
|
+
};
|
|
111
|
+
}
|
|
112
|
+
return {
|
|
113
|
+
content: [
|
|
114
|
+
{
|
|
115
|
+
type: 'text',
|
|
116
|
+
text: `メモ「${params.title}」が正常に作成されました。`,
|
|
117
|
+
},
|
|
118
|
+
],
|
|
119
|
+
};
|
|
120
|
+
} catch (error) {
|
|
121
|
+
const errorMessage =
|
|
122
|
+
error instanceof Error ? error.message : '不明なエラー';
|
|
123
|
+
return {
|
|
124
|
+
content: [
|
|
125
|
+
{
|
|
126
|
+
type: 'text',
|
|
127
|
+
text: `メモの作成中にエラーが発生しました: ${errorMessage}`,
|
|
128
|
+
},
|
|
129
|
+
],
|
|
130
|
+
isError: true,
|
|
131
|
+
};
|
|
132
|
+
}
|
|
133
|
+
}
|
|
134
|
+
//# sourceMappingURL=memo.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"memo.js","sourceRoot":"","sources":["../../src/tools/memo.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"create-memo.js","sourceRoot":"","sources":["../../src/types/create-memo.ts"],"names":[],"mappings":""}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/types/index.ts"],"names":[],"mappings":"AAAA,cAAc,kBAAkB,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"mcp.js","sourceRoot":"","sources":["../../src/types/mcp.ts"],"names":[],"mappings":""}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"paput.js","sourceRoot":"","sources":["../../src/types/paput.ts"],"names":[],"mappings":""}
|
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
import dotenv from 'dotenv';
|
|
2
|
+
dotenv.config();
|
|
3
|
+
export function getConfig() {
|
|
4
|
+
const apiKey = process.env.PAPUT_API_KEY;
|
|
5
|
+
// 開発環境用のデフォルトAPIキー(本番環境では使用しないでください)
|
|
6
|
+
const devApiKey = 'dev_api_key_for_testing';
|
|
7
|
+
// APIキーがない場合は警告を表示するが、開発環境ではプロセスを終了しない
|
|
8
|
+
if (!apiKey) {
|
|
9
|
+
console.warn(
|
|
10
|
+
'警告: PAPUT_API_KEY 環境変数が設定されていません。開発用キーを使用します。',
|
|
11
|
+
);
|
|
12
|
+
console.warn(
|
|
13
|
+
'これはローカル開発用です。本番環境では必ず PAPUT_API_KEY を設定してください。',
|
|
14
|
+
);
|
|
15
|
+
}
|
|
16
|
+
return {
|
|
17
|
+
port: parseInt(process.env.PORT || '3000', 10),
|
|
18
|
+
paputApiUrl: process.env.PAPUT_API_URL || 'https://api.paput.app',
|
|
19
|
+
paputApiKey: apiKey || devApiKey,
|
|
20
|
+
logLevel: process.env.LOG_LEVEL || 'info',
|
|
21
|
+
};
|
|
22
|
+
}
|
|
23
|
+
//# sourceMappingURL=config.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"config.js","sourceRoot":"","sources":["../../src/utils/config.ts"],"names":[],"mappings":"AAAA,OAAO,MAAM,MAAM,QAAQ,CAAC;AAE5B,MAAM,CAAC,MAAM,EAAE,CAAC;AAShB,MAAM,UAAU,SAAS;IACvB,MAAM,MAAM,GAAG,OAAO,CAAC,GAAG,CAAC,aAAa,CAAC;IAEzC,qCAAqC;IACrC,MAAM,SAAS,GAAG,yBAAyB,CAAC;IAE5C,uCAAuC;IACvC,IAAI,CAAC,MAAM,EAAE,CAAC;QACZ,OAAO,CAAC,IAAI,CAAC,+CAA+C,CAAC,CAAC;QAC9D,OAAO,CAAC,IAAI,CAAC,gDAAgD,CAAC,CAAC;IACjE,CAAC;IAED,OAAO;QACL,IAAI,EAAE,QAAQ,CAAC,OAAO,CAAC,GAAG,CAAC,IAAI,IAAI,MAAM,EAAE,EAAE,CAAC;QAC9C,WAAW,EAAE,OAAO,CAAC,GAAG,CAAC,aAAa,IAAI,uBAAuB;QACjE,WAAW,EAAE,MAAM,IAAI,SAAS;QAChC,QAAQ,EAAE,OAAO,CAAC,GAAG,CAAC,SAAS,IAAI,MAAM;KAC1C,CAAC;AACJ,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"error-handler.js","sourceRoot":"","sources":["../../src/utils/error-handler.ts"],"names":[],"mappings":"AAEA,MAAM,UAAU,kBAAkB,CAAC,MAAc;IAC/C,MAAM,CAAC,OAAO,GAAG,CAAC,KAAK,EAAE,EAAE;QACzB,OAAO,CAAC,KAAK,CAAC,aAAa,EAAE,KAAK,CAAC,CAAC;IACtC,CAAC,CAAC;IAEF,OAAO,CAAC,EAAE,CAAC,QAAQ,EAAE,KAAK,IAAI,EAAE;QAC9B,MAAM,MAAM,CAAC,KAAK,EAAE,CAAC;QACrB,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAClB,CAAC,CAAC,CAAC;AACL,CAAC"}
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
import winston from 'winston';
|
|
2
|
+
import { getConfig } from './config';
|
|
3
|
+
const { logLevel } = getConfig();
|
|
4
|
+
export const logger = winston.createLogger({
|
|
5
|
+
level: logLevel,
|
|
6
|
+
format: winston.format.combine(
|
|
7
|
+
winston.format.timestamp(),
|
|
8
|
+
winston.format.json(),
|
|
9
|
+
),
|
|
10
|
+
transports: [
|
|
11
|
+
new winston.transports.Console({
|
|
12
|
+
format: winston.format.combine(
|
|
13
|
+
winston.format.colorize(),
|
|
14
|
+
winston.format.simple(),
|
|
15
|
+
),
|
|
16
|
+
}),
|
|
17
|
+
],
|
|
18
|
+
});
|
|
19
|
+
//# sourceMappingURL=logger.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"logger.js","sourceRoot":"","sources":["../../src/utils/logger.ts"],"names":[],"mappings":"AAAA,OAAO,OAAO,MAAM,SAAS,CAAC;AAC9B,OAAO,EAAE,SAAS,EAAE,MAAM,UAAU,CAAC;AAErC,MAAM,EAAE,QAAQ,EAAE,GAAG,SAAS,EAAE,CAAC;AAEjC,MAAM,CAAC,MAAM,MAAM,GAAG,OAAO,CAAC,YAAY,CAAC;IACzC,KAAK,EAAE,QAAQ;IACf,MAAM,EAAE,OAAO,CAAC,MAAM,CAAC,OAAO,CAC5B,OAAO,CAAC,MAAM,CAAC,SAAS,EAAE,EAC1B,OAAO,CAAC,MAAM,CAAC,IAAI,EAAE,CACtB;IACD,UAAU,EAAE;QACV,IAAI,OAAO,CAAC,UAAU,CAAC,OAAO,CAAC;YAC7B,MAAM,EAAE,OAAO,CAAC,MAAM,CAAC,OAAO,CAC5B,OAAO,CAAC,MAAM,CAAC,QAAQ,EAAE,EACzB,OAAO,CAAC,MAAM,CAAC,MAAM,EAAE,CACxB;SACF,CAAC;KACH;CACF,CAAC,CAAC"}
|
package/package.json
ADDED
|
@@ -0,0 +1,47 @@
|
|
|
1
|
+
{
|
|
2
|
+
"name": "paput-mcp",
|
|
3
|
+
"version": "1.0.0",
|
|
4
|
+
"description": "PaPut MCP Server",
|
|
5
|
+
"main": "dist/index.js",
|
|
6
|
+
"type": "module",
|
|
7
|
+
"bin": {
|
|
8
|
+
"paput-mcp": "./dist/index.js"
|
|
9
|
+
},
|
|
10
|
+
"scripts": {
|
|
11
|
+
"build": "tsc",
|
|
12
|
+
"start": "node dist/index.js",
|
|
13
|
+
"dev": "ts-node --esm src/index.ts",
|
|
14
|
+
"prepare": "npm run build",
|
|
15
|
+
"format": "prettier --write ."
|
|
16
|
+
},
|
|
17
|
+
"keywords": [
|
|
18
|
+
"mcp",
|
|
19
|
+
"paput",
|
|
20
|
+
"ai",
|
|
21
|
+
"assistant",
|
|
22
|
+
"memo",
|
|
23
|
+
"output"
|
|
24
|
+
],
|
|
25
|
+
"author": "mizuko",
|
|
26
|
+
"homepage": "https://paput.io",
|
|
27
|
+
"files": [
|
|
28
|
+
"dist",
|
|
29
|
+
"README.md",
|
|
30
|
+
"LICENSE.txt"
|
|
31
|
+
],
|
|
32
|
+
"license": "MIT",
|
|
33
|
+
"dependencies": {
|
|
34
|
+
"@modelcontextprotocol/sdk": "1.11.0",
|
|
35
|
+
"dotenv": "^16.3.1",
|
|
36
|
+
"zod": "^3.22.4"
|
|
37
|
+
},
|
|
38
|
+
"devDependencies": {
|
|
39
|
+
"@types/node": "^20.10.5",
|
|
40
|
+
"prettier": "^3.5.3",
|
|
41
|
+
"ts-node": "^10.9.2",
|
|
42
|
+
"typescript": "^5.3.3"
|
|
43
|
+
},
|
|
44
|
+
"volta": {
|
|
45
|
+
"node": "20.12.2"
|
|
46
|
+
}
|
|
47
|
+
}
|