Papers by Ouroboros Apps について
Papers は、学生、研究者、ライター、臨床従事者向けのリモート MCP サーバーです。学術論文の検索、引用関係の確認、参考文献の書式化ができ、結果には出典リンクと識別子が付き、取得できない引用は生成しません。
主な機能
- 01複数の学術情報源から論文検索
- 02DOI・PMID・arXiv IDによる論文取得
- 03被引用文献と参考文献の検索
- 04APA・MLA・Chicago・BibTeX形式の引用作成
活用シーン
- 01研究テーマに関連する論文の検索
- 02論文の要旨と引用関係の確認
- 03指定形式での参考文献の作成
MCP 対応
Streamable HTTP と OAuth を通じて、論文検索、取得、関連論文の調査、引用書式化を行う読み取り専用ツールを MCP クライアントに提供します。
設定
リモートサーバーはインストール不要です。クライアントを選んで設定をコピーするか、ワンクリックで導入できます。
https://papers-mcp.vercel.app/mcpclaude mcp add --transport http lahutchins91-papers https://papers-mcp.vercel.app/mcp{"mcpServers":{"lahutchins91-papers":{"type":"http","url":"https://papers-mcp.vercel.app/mcp"}}}Cursor で開く{"servers":{"lahutchins91-papers":{"type":"http","url":"https://papers-mcp.vercel.app/mcp"}}}VS Code で開く{"mcpServers":{"lahutchins91-papers":{"type":"http","url":"https://papers-mcp.vercel.app/mcp"}}}{"mcpServers":{"lahutchins91-papers":{"serverUrl":"https://papers-mcp.vercel.app/mcp"}}}コマンドはターミナルで実行し、JSON は各クライアントの MCP 設定に貼り付けて再起動します。認可が必要なサーバーは初回接続時にログインを求めます。
ツール
4| パラメーター | 型 | 必須 | 説明 |
|---|---|---|---|
| field | string | いいえ | Medicine や Computer Science などの分野 |
| limit | integer | いいえ | 返す論文の最大数。デフォルトは 8 です。 |
| query | string | はい | 質問またはキーワード |
| source | enum | いいえ | 検索するインデックス。デフォルトは all で、複数のソースを混在させます。openalex | semantic_scholar | pubmed | crossref | arxiv | all |
| year_to | integer | いいえ | |
| year_from | integer | いいえ | |
| open_access | boolean | いいえ |
詳細
Ouroboros の論文
Papers by Ouroboros は、実際の論文を検索して引用したい学生、研究者、ライター、臨床医向けのリモート MCP サーバーです。Consensus、SciSpace、Elicit に代わる、より軽量な独立系サービスです。
アシスタントは OpenAlex、Semantic Scholar、PubMed、Crossref、arXiv を検索し、DOI、PMID、arXiv の ID から論文を開き、その論文を引用している論文や、その論文が引用している論文を確認できます。また、APA、MLA、Chicago、BibTeX の形式で書式を整えられます。すべての検索結果には、ソースへのリンクと、これらの API のいずれかから返された識別子が含まれます。API が何も返さない場合、Papers も何も返しません。架空の引用で不足を補うことはありません。
- ChatGPT、Claude、Gemini、Grok、Cursor、および Streamable HTTP と OAuth 2.1(動的クライアント登録と PKCE)に対応するすべてのクライアントで動作します
ホストされたサーバー
- MCP サーバー URL:
https://papers-mcp.vercel.app/mcp(稼働中、Streamable HTTP、OAuth サインイン) - ヘルスチェック:https://papers-mcp.vercel.app/health
- 保護されたリソースのメタデータ:https://papers-mcp.vercel.app/.well-known/oauth-protected-resource
- 接続ガイド:https://papers-mcp.vercel.app/connect
- ドキュメント:https://ouroborosapps.com/docs/papers
- レジストリ名:
io.github.LAHutchins91/papers(server.jsonのremotes[0].urlは上記のホスト URL を参照します)
セルフホストする場合、MCP エンドポイントは https://<your-host>/mcp です。APP_BASE_URL にそのオリジンを設定し、手元の server.json の remotes[0].url を変更してください。
接続
クライアントが自身を登録できるよう、クライアント ID とシークレットは空欄のままにしてください。
Cursor の場合、~/.cursor/mcp.json またはプロジェクトの .cursor/mcp.json に設定します。
{
"mcpServers": {
"papers": {
"url": "https://papers-mcp.vercel.app/mcp"
}
}
}
Claude Code:
claude mcp add --transport http papers https://papers-mcp.vercel.app/mcp
その他のクライアントでは、同じ URL を追加して OAuth を選択してください。同意画面にはアシスタント名と papers スコープが表示されます。ツールの検出(initialize、tools/list、ping)にトークンは不要です。ツールの呼び出しには必要です。
ツール
search_papers— 質問またはキーワードを指定します。年の範囲、分野、オープンアクセスのフラグ、ソース(openalex、semantic_scholar、pubmed、crossref、arxiv、またはall)は任意ですget_paper— DOI、PMID、arXiv の ID、または OpenAlex の work ID から、1 件のレコードとその要約を取得しますfind_related_papers— その識別子についてcited_byまたはreferencesを取得しますformat_citation— 取得したメタデータをもとにapa、mla、chicago、またはbibtex形式で引用を整えます
タイトルはソースに記載されたまま保持されます。著者名は表示名から分割されるため、「van」などの接頭辞が誤った位置に入ることがあります。引用を公開する前に確認してください。
権限、データ、制限
OAuth スコープ。 スコープは papers の1つです。同意画面にはアシスタントとそのスコープが表示されます。このサーバー上でのツール呼び出しのみが許可されます。他のアカウント、ファイル、サービスへのアクセス権は付与されません。
操作。 4つのツールはいずれも、公開されている学術 API を読み取り専用で検索します(readOnlyHint: true、destructiveHint: false)。書き込みや削除の操作はありません。Papers は、サーバーの外部や学術情報源に対して、お客様に代わって何かを作成、変更、削除することはありません。
確認。 書き込みや削除を行わないため、ツールで確認手順を求めることはありません。確認が必要なのは、接続時の OAuth 同意画面と、トライアル開始時の Stripe Checkout のみです。
保存、保持、プライバシー。 Papers はクエリのログや履歴を保持しません。検索語や識別子は応答元の学術情報源に送信され、応答後は保持されません。Papers が保存するのは、ランダムなアカウント ID(Cookie は90日間、アクセストークンは1時間、リフレッシュトークンは30日間)、有効期限までの使い捨て認証コード ID(5分間)、およびトライアル開始後のサブスクリプションのスナップショット(アカウント ID、Stripe 顧客 ID、サブスクリプション ID、ステータス、期間終了日、プランの間隔)です。レート制限カウンターは、約1~10分間メモリ上に保持されます。接続時に氏名やメールアドレスを尋ねることはありません。エクスポートまたは削除のリクエストは [email protected] にお送りください。ポリシー全文:https://papers-mcp.vercel.app/privacy
無料利用の制限。 ツールの検出(initialize、tools/list、ping)は無料で利用できます。ツールを呼び出すには、Stripe Checkout で14日間のトライアルを開始し、その後 Pro サブスクリプションに加入する必要があります。料金は Stripe に表示されます。このリポジトリには料金が記載されていません。クライアント IP ごとに、MCP リクエストは1分あたり300件までです。上流 API にも個別のレート制限があります(以下の「レート制限」を参照)。
利用方法。 一般的なセッションでは、ユーザーが研究に関する質問をし、アシスタントが search_papers を呼び出してから、get_paper で1~2件の結果を開き、find_related_papers でそれらを引用している論文を確認し、最後にユーザーが必要とする形式で format_citation を使います。回答に含まれる各レコードから、そのレコードを返した情報源にリンクします。
トライアルと請求
アシスタントを接続した後、アカウントページから14日間のトライアルを開始してください。料金が表示されるのは Stripe Checkout のみです。月額プランと年額プランでは、設定した価格 ID が使用されます。Papers が Stripe の商品を作成することはありません。
STRIPE_SECRET_KEY、STRIPE_PRICE_MONTHLY、STRIPE_PRICE_YEARLY がすべて設定されている場合、ツールの呼び出しには、ステータスが trialing または active の Stripe サブスクリプションが必要です。これらが設定されていない場合、GET /health は billingConfigured: false を報告し、OAuth 署名済みの呼び出し元はツールを利用できます。デプロイを一般公開する前に、Stripe の変数を設定してください。
ストレージ
論文検索はステートレスです。サブスクリプションのスナップショットと使用済み認証コードの ID は、同じストアを共有します。
STORAGE_BACKEND | 動作 |
|---|---|
memory(デフォルト) | プロセス内で保持されます。テストや単一の Node プロセスでの使用に適しています。別のプロセスでは、このプロセスですでに使用したコードを受け入れる可能性があります。 |
file | STORAGE_PATH にある単一の JSON ドキュメント(デフォルトは data/accounts.json)です。単一の Docker ホストで使用します。 |
blob | STORAGE_BLOB_PATH にある単一の非公開 Vercel Blob(デフォルトは papers/accounts.json)です。インスタンス間でコードが再利用されないよう、Vercel ではこちらを使用してください。BLOB_READ_WRITE_TOKEN が必要です。 |
ドキュメントは { accounts, usedCodes } です。各アカウントは { userId, stripeCustomerId, subscriptionId, subscriptionStatus, currentPeriodEnd, plan, updatedAt } です。usedCodes は、認証コードの ID と有効期限(Unix 秒)の対応を保持します。書き込みのたびに期限切れの ID は削除されます。アカウントのマップだけを含む古いファイルも引き続き読み込めます。個別のデータベーススキーマはありません。課金が設定されている場合、Stripe が信頼できる情報源になります。スナップショットがないとき、起動直後のプロセスは metadata.papers_user_id を使って顧客を検索します。
OAuth アクセストークンとクライアント登録は、行ではなく署名付きトークンです。本番環境では、再起動後もトークンが有効であるよう AUTH_SIGNING_SECRET を設定してください。Vercel では、デプロイを公開する前に STORAGE_BACKEND=blob を設定してください。
環境変数
| 変数 | 必須 | 用途 |
|---|---|---|
APP_BASE_URL | 本番環境 | 末尾にスラッシュを付けない公開オリジンです。OAuth 発行者と MCP オーディエンスに使用します。 |
AUTH_SIGNING_SECRET | 本番環境 | OAuth トークンとアカウント Cookie 用の HMAC シークレットです。 |
SCHOLARLY_CONTACT_EMAIL | 本番環境 | User-Agent と、OpenAlex、Crossref、PubMed のポライトプールパラメーターに使用するメールアドレスです。公開ページには表示されません。 |
REVIEWER_LOGIN_EMAIL | ストア審査用 | レビュアーのサインイン時に入力するメールアドレスです。下記を参照してください。 |
REVIEWER_LOGIN_PASSWORD_HASH | ストア審査用 | レビュアーのパスワードの scrypt ハッシュです。下記を参照してください。 |
COMP_ACCOUNT_EMAILS | ストア審査用 | 永続的な無料アクセスを付与するメールアドレスをカンマ区切りで指定します。 |
COMP_ACCOUNT_IDS | いいえ | 永続的な無料アクセスを付与するアカウント ID をカンマ区切りで指定します。 |
NCBI_API_KEY | いいえ | PubMed のレート制限が引き上げられます。 |
SEMANTIC_SCHOLAR_API_KEY | いいえ | Semantic Scholar のレート制限が引き上げられます。x-api-key として送信されます。 |
STRIPE_SECRET_KEY | 課金する場合 | Stripe のシークレットキーです。 |
STRIPE_PRICE_MONTHLY | 課金する場合 | 既存の月額価格 ID です。 |
STRIPE_PRICE_YEARLY | 課金する場合 | 既存の年額価格 ID です。 |
STRIPE_WEBHOOK_SECRET | 課金する場合 | Webhook 署名シークレットです。Stripe の送信先を POST /billing/webhook に設定してください。 |
STORAGE_BACKEND | いいえ | memory、file、または blob です。 |
STORAGE_PATH | いいえ | バックエンドが file の場合に使用する JSON ファイルです。 |
STORAGE_BLOB_PATH | いいえ | バックエンドが blob の場合の Blob パス名です。デフォルトは papers/accounts.json です。 |
BLOB_READ_WRITE_TOKEN | blob の場合 | Vercel Blob ストア用の読み書きトークンです。SDK がこれを直接読み込みます。 |
PORT | いいえ | デフォルトは 43127 です。 |
シークレットをコミットしないでください。必要なものはリポジトリではなく、ホストの環境変数にコピーしてください。
ローカルで実行
npm install
npm run dev
http://127.0.0.1:43127 を開いてください。ヘルスチェックは GET /health です。
npm test
npm run typecheck
テストでは、キーを必要としない公開 API を呼び出します。Stripe は呼び出されません。Semantic Scholar は共有 IP 空間からのリクエストに対して 429 を返すことがよくあります。その場合、ツールはレート制限を報告し、実在しない論文で代替することはありません。
デプロイ
Vercel:vercel.json は api/index.ts をビルドし、関数バンドルに含まれる logo.jpg を含め、すべてのパスをその関数にルーティングします。/package.json や /src/* などのリポジトリ内のファイルは、静的ファイルとして配信されません。上記の環境変数を設定し、APP_BASE_URL にデプロイ先のオリジンを設定し、STORAGE_BACKEND=blob を設定して、server.json の remotes[0].url を https://<that-host>/mcp に更新してください。Vercel プロジェクトで Blob ストアを作成し、その読み書きトークンを BLOB_READ_WRITE_TOKEN に設定してください。Stripe の Webhook エンドポイントは POST /billing/webhook です。
Docker:
docker build -t papers-mcp .
docker run --rm -p 43127:43127 -e APP_BASE_URL=http://127.0.0.1:43127 -e AUTH_SIGNING_SECRET=replace-me -e [email protected] papers-mcp
コンテナはポート 43127 でリッスンします。
レート制限
ホストごとにリクエスト間隔を調整します:OpenAlex は約 10 回/秒、Crossref は約 4 回/秒、NCBI キーなしの PubMed は約 3 回/秒、キーなしの Semantic Scholar は約 1 回/秒、arXiv は呼び出し間隔を少なくとも 3 秒空けます。説明的な User-Agent は常に送信されます。連絡先メールアドレスは、SCHOLARLY_CONTACT_EMAIL が設定されている場合にのみ含まれます。
ライセンス
MIT。著作権者:Lawrence Hutchins。LICENSE を参照してください。
お問い合わせ
公開サポート、プライバシー、エクスポート、削除に関するお問い合わせ:[email protected]
- プライバシー:
/privacy - 利用規約:
/terms - サポート:
/support - サイト:https://ouroborosapps.com
公開ページには常にこのメールアドレスが表示されます。SCHOLARLY_CONTACT_EMAIL は、学術 API の適正利用に関するヘッダーでのみ送信されます。サイトには表示されません。SUPPORT_EMAIL は読み込まれません。
server.json、glama.json、および .cursor-plugin/plugin.json には、連絡先メールアドレスのフィールドはありません。server.json で使用されるレジストリスキーマにも、そのようなフィールドは定義されていません。
ストアレビュアーのサインイン
レビュアーは OAuth 同意画面で レビュアーのサインイン を選択してサインインします。別途の登録、二要素認証、カードは必要ありません。ホスト上でこれらを設定してください(Vercel プロジェクト → Settings → Environment Variables)。Production と、レビュアーが開く Preview URL の両方に設定してください。値をコミットしないでください。
| 変数 | 形式 |
|---|---|
REVIEWER_LOGIN_EMAIL | メールアドレスを 1 つ設定します。レビュアーが入力する値です。比較時に小文字に変換されます。 |
REVIEWER_LOGIN_PASSWORD_HASH | 1 行で指定します:scrypt$16384$8$1$<salt-base64url>$<hash-base64url>。ソルトは 16 バイト、ハッシュは 32 バイトです。scrypt のパラメーターは N=16384、r=8、p=1 です。 |
COMP_ACCOUNT_EMAILS | カンマ区切りのメールアドレスです。REVIEWER_LOGIN_EMAIL を含めてください。各メールアドレスにより、そこから導出される安定したアカウント ID に永続的な権利が付与されます。 |
COMP_ACCOUNT_IDS | 任意のカンマ区切りのアカウント ID です。導出されたレビュアー ID、または無料利用の対象にしたい匿名アカウント ID を指定します。 |
ログイン時にメールアドレスとパスワードハッシュが確認されます。試用期間と Stripe をスキップするかどうかは、許可リストによって決まります。COMP_ACCOUNT_EMAILS に REVIEWER_LOGIN_EMAIL と同じアドレスを設定するか、導出された ID を COMP_ACCOUNT_IDS に指定してください。通常の匿名アカウントには変更はなく、課金が設定されている場合は引き続き試用期間が必要です。
ハッシュを生成します(パスワードは引数として指定し、リポジトリ内のファイルには保存しません):
node --input-type=module -e '
import crypto from "node:crypto";
const password = process.argv[1];
if (!password) { console.error("Pass the password as an argument."); process.exit(1); }
const salt = crypto.randomBytes(16);
const hash = crypto.scryptSync(password, salt, 32, { N: 16384, r: 8, p: 1 });
process.stdout.write(`scrypt$16384$8$1$${salt.toString("base64url")}$${hash.toString("base64url")}\n`);
' 'replace-with-the-reviewer-password'
COMP_ACCOUNT_IDS 用のアカウント ID を出力します(papers-reviewer、NUL バイト、小文字に変換したメールアドレスを連結した値の SHA-256 の先頭 32 桁の 16 進数):
node --input-type=module -e '
import crypto from "node:crypto";
const email = process.argv[1].trim().toLowerCase();
process.stdout.write(crypto.createHash("sha256").update(`papers-reviewer\0${email}`).digest("hex").slice(0, 32) + "\n");
' '[email protected]'
サインイン後、ツールは最新のレコードを返します。レビュアーは短いクエリで search_papers を呼び出し、続けて DOI 10.1038/nature14539 を指定して get_paper、find_related_papers、format_citation を呼び出せます。
Ouroboros による論文。Ouroboros のその他の情報:https://ouroborosapps.com
コメント
AI アプリケーションが外部のツールやデータソースに統一的な方法で接続するためのオープンなプロトコルです。クライアントはモデルとの対話を担い、MCP サーバーはツール・リソース・プロンプトテンプレートを提供します。標準メッセージでやり取りするため、1 つのサーバーを複数のクライアントで再利用できます。