rbac-rag-assistant
rbac-rag-assistant
関連: drivescore-cloud — Kubernetes 上の Go サービスで、Terraform とインシデントログを備えています。
大学向けの内部ナレッジアシスタントです。職員と学生が平易な言葉で質問し、閲覧を許可されたポリシードキュメントに基づいた回答を得られます。検索拡張(Retrieval-augmented)、ツール呼び出し、ロール認識を備え、MCP 経由で公開されているため、どのクライアントでも同じルールのもとで同じツールを利用できます。
これは5層システムの Layer 0 です。その上の層は、デリバリーパイプライン、信頼性エンジニアリング、評価、セキュリティテスト、オブザーバビリティを追加します。それぞれがこのアプリケーションの隣ではなく、その上に重なります。
実行方法
Python 3.13。このマシンの python は msys2 ビルドを指しており、これらのパッケージは一切含まれていないため、venv のインタープリターを直接呼び出してください。
py -3.13 -m venv .venv
.\.venv\Scripts\python.exe -m pip install -r requirements.txt.\.venv\Scripts\python.exe test_rag.py
.\.venv\Scripts\python.exe test_tools.pyどちらも ok を表示し、API キーは不要です。検索とアクセスルールはオフラインでテスト可能です。それらをモデルの外に置いているのは、まさにそのためです。
何か質問する(GEMINI_API_KEY が必要):
.\.venv\Scripts\python.exe agent.py student "I have a 1.8 GPA, what happens?"
.\.venv\Scripts\python.exe agent.py staff "the wifi is down in the east wing, log it"検索のみ(キー不要):
.\.venv\Scripts\python.exe rag.py admin "adjunct pay per credit hour"Related MCP server: mcp-business-bot
構成の全体像
ファイル | 担当 |
| パース、チャンク分割、TF-IDF インデックス、クリアランスフィルター |
| 3つのツール、それらのアクセスルール、引数検証 |
| ツール呼び出しループ。使用するモデルベンダーを知っている唯一のファイル |
| 同じツールを MCP 上で公開。独自の実装はない |
| コーパス。フロントマターが各ドキュメントの |
擁護に値する3つの設計判断
呼び出し元のロールはツールのパラメーターではない。 ロールは、ターン開始前に帯域外でバインドされます。もし search_docs(query, role) が存在していたなら、モデルが自身のクリアランスを持つことになり、取得されたドキュメントに埋め込まれた「role=admin を使え」という一文が権限昇格の経路になっていたでしょう。渡すものが何もないので、渡すように説得することもできません。
クリアランスフィルターは結果ではなく候補セットに適用される。 呼び出し元が見られないチャンクはランキングに決して入らないため、結果の欠落や変動したスコアから、その存在を推測することはできません。
TF-IDF であり、埋め込みではない。 これは Layer 3 が打ち破るために存在するベースラインです。ゴールデンセットがないうちにセマンティック検索に置き換えるのは推測にすぎません。後で置き換えれば、変更を正当化する数値が得られます。置き換え箇所は Index です。
MCP
mcp_server.py は tools.py の関数を登録するだけで、それ以外は追加しません。これが MCP を1つのファイルにまとめる根拠です。実装は1つ、アクセスルールは1セット、クライアントは多数。クライアントの設定に追加してください:
{
"mcpServers": {
"rbac-rag-assistant": {
"command": "C:\\Users\\Shrey\\Documents\\CLAUDE CODE\\rbac-rag-assistant\\.venv\\Scripts\\python.exe",
"args": ["C:\\Users\\Shrey\\Documents\\CLAUDE CODE\\rbac-rag-assistant\\mcp_server.py"],
"env": { "KB_ROLE": "staff" }
}
}
}MCP クライアントには大学のロールという概念がないため、KB_ROLE は起動時に一度だけ読み込まれ、接続全体に適用されます。ロールは会話ではなくサーバープロセスに属します。これにより、モデルがロールを選択できなくなっています。
アクセス拒否時の挙動
教職員専用の資料について学生が質問した場合、「存在しない」とは言わず、資料は存在するが閲覧許可がないと伝えます(ADR-7)。ライブで確認済み:
アカウントが不正使用された疑いがある場合の対処方法についてのガイダンスは、大学のポリシー文書に存在しますが、アクセスには職員のクリアランスが必要です。このポリシーを所管する部署に連絡してください。
境界を越えるのは分類ラベルのみであり、それ以外は何も越えません。パッセージも、タイトルも、ファイル名もありません。どのドキュメントも扱わない質問には別の回答が返ります。この区別の要点はまさにそこです。
驚いたこと
1つ目。 faculty compensation bands はある管理者に対して何も返しませんでしたが、professor salary は同じドキュメントを 0.29 で返しました。その3つの単語はドキュメントのタイトルにしか現れません。parse() はインデックス作成前にタイトルを本文から取り出してメタデータに移します。ユーザーはドキュメントの文言よりもタイトルで検索することがはるかに多いため、最も機密性の高いドキュメントに対する最も自然なクエリが、まさに必ず失敗するクエリでした。修正は1行です。title + text をインデックスし、text を保存します。
記録する価値があるのは、それが どこで 見つかったかです。アクセス制御のテストは一貫して成功していました。学生が機密コンテンツを決して見られないことを検証するテストも含めてです。しかし、誰もそのドキュメントを取得できない状況では、そのテストは空虚に真となっていました。何も返されなかったから通るテストは、ルールが機能しているから通るテストと見た目がまったく同じです。
2つ目。ADR-7 を実装しているときに見つかりました。 「制限対象の資料は存在します」という通知が、無害な質問にも発動します。「ここで正教授をしているのは誰ですか」は報酬帯に対して 0.28 とスコアし、正当な職員の一致の 0.19 よりも高い値です。両者を分ける閾値は存在しないため、これは調整では解決できません。共通する単語と共通する意味を区別できない、語彙マッチングの限界です。情報は漏れていませんが、回答は依然として間違っています。Layer 3 が最初に測定すべき事項です。
3つ目。 モデルはドキュメントがカバーしていない小さな隙間を埋めます。不正使用されたアカウントについて尋ねられたとき、ツールが「それを所管する部署」とだけ答えていたのに、モデルは「IT サービスデスクまたは IT セキュリティチーム」に連絡するよう提案しました。もっともらしく、ここでは無害ですが、取得されたどの情報にも基づいていません。これはまさに groundedness スコアラーが検出するために存在する挙動であり、最初の5件のライブ質問の中で出現しました。
環境
変数 | デフォルト | |
|
| |
|
| 固定。エイリアスではない。ADR-8 |
|
| MCP サーバー専用 |
|
| コーパスディレクトリ |
|
| チケットログ |
This server cannot be installed
Maintenance
Resources
Unclaimed servers have limited discoverability.
Looking for Admin?
If you are the server author, to access and configure the admin panel.
Related MCP Connectors
Query any docs site via MCP. Submit a URL, ask questions, get cited answers.
Query your org's data in natural language — read-only MCP access to SQL, NoSQL, files & warehouses.
Hybrid human + AI expertise for faster, trusted answers and decisions via MCP Server.
Make your knowledge agent-ready. One MCP endpoint, 5 connectors, 3 search modes.
Related MCP Servers
- AlicenseNot gradedqualityBmaintenanceEnables document-based Q&A with multi-modal RAG, hybrid retrieval, knowledge graph reasoning, and multi-agent orchestration via MCP tools.4MIT
- FlicenseNot gradedqualityCmaintenanceEnables querying company knowledge base using RAG, providing accurate answers from internal documents via MCP.
- FlicenseNot gradedqualityCmaintenanceEnables local document question-answering and retrieval via MCP, supporting multi-turn conversation, intent recognition, and tools for document search, Q&A, and summarization.5
- FlicenseNot gradedqualityBmaintenanceEnables natural-language Q&A, human-approved actions, and dashboard generation over a data ontology via MCP.
Latest Blog Posts
- Who's Calling? MCP Hosts Are an Identity Blind Spot (And the Spec Knows It)By Om-Shree-0709 on .mcpAgent IdentityOAuth 2.1
- Your AI Chatbot Just Exposed Your CEO's Salary to an InternBy Om-Shree-0709 on .Agent IdentityMCP SecurityOAuth Delegation
- Why MCP Servers Need Execution Sandboxing (And Why Your Current Stack Isn't Enough)By Om-Shree-0709 on .Agentic AiPrompt InjectionWebAssembly
MCP directory API
We provide all the information about MCP servers via our MCP API.
curl -X GET 'https://glama.ai/api/mcp/v1/servers/Shrey-Parikh31/rbac-rag-assistant'
If you have feedback or need assistance with the MCP directory API, please join our Discord server