mcpField
D
Data Prism

Data Prism

ローカル
aindriub.github.ioセキュリティ11 日前に更新

Data Prism について

Data Prism は、内部 API の前段に LLM エージェントや MCP クライアントを置く Java/Spring チーム向けのプライバシー層です。プライバシースコープ内で一貫した仮名を付与し、未分類データを拒否します。ハッシュチェーン監査ログにも対応します。

主な機能

  1. 01プライバシースコープごとの個人データ仮名化
  2. 02データソース間で合成 ID を統一
  3. 03未分類データの拒否
  4. 042 つの MCP ツールを提供
  5. 05ハッシュチェーン監査ログ

活用シーン

  1. 01LLM エージェントによる顧客 API 照会前の個人データ露出抑制
  2. 02調査時にシステム間で同一エンティティを関連付け
  3. 03監査記録の編集や削除の検証

MCP 対応

MCP クライアントに `get_entity_context` と `compare_entity_sources` を公開し、データ返却前にプライバシー制御を適用します。

設定

ローカルサーバーの設定はどのクライアントでも共通です。コピーしてクライアントの MCP 設定ファイルに貼り付けてください。

mcp.json · 共通設定
{
"mcpServers": {
"aindriub-data-prism": {
"command": "docker",
"args": [
"run",
"-i",
"--rm",
"-e",
"LOADER_PATH",
"-e",
"DATAPRISM_SECURITY_JWT_ISSUER",
"-e",
"DATAPRISM_SECURITY_JWT_AUDIENCE",
"-e",
"DATAPRISM_SECURITY_JWT_JWK_SET_URI",
"-e",
"DATAPRISM_SECURITY_JWT_ISSUER_DISCOVERY_URI",
"-e",
"DATAPRISM_SECURITY_CALLER_CLAIMS_PRINCIPAL",
"-e",
"DATAPRISM_SECURITY_CALLER_CLAIMS_ROLES",
"-e",
"DATAPRISM_SECURITY_CALLER_CLAIMS_INVESTIGATION",
"-e",
"DATAPRISM_SECURITY_POLICY_PURPOSES",
"-e",
"DATAPRISM_SECURITYPOLICY_ROLES_INVESTIGATOR",
"-e",
"DATAPRISM_PRIVACY_PROFILE",
"-e",
"DATAPRISM_PRIVACY_SCOPE_LIFETIME",
"-e",
"DATAPRISM_PRIVACY_HMAC_KEY_KEY_ID",
"-e",
"DATAPRISM_PRIVACY_HMAC_KEY_ENVIRONMENT_VARIABLE",
"-e",
"DATAPRISM_PRIVACY_HMAC_KEY_PROVIDER_REFERENCE",
"-e",
"DATAPRISM_AUDIT_SINK",
"-e",
"DATAPRISM_AUDIT_WRITER_ID",
"-e",
"DATAPRISM_AUDIT_FILE_PATH",
"-e",
"DATAPRISM_METRICS_SINK",
"-e",
"DATAPRISM_HAZELCAST_TOPOLOGY",
"-e",
"DATAPRISM_HAZELCAST_CLUSTERNAME",
"-e",
"DATAPRISM_HAZELCAST_JOIN_MODE",
"-e",
"DATAPRISM_HAZELCAST_JOIN_MEMBERS",
"-e",
"DATAPRISM_HAZELCAST_MEMBER_PORT",
"-e",
"DATAPRISM_OPERATOR_ENABLED",
"-e",
"DATAPRISM_OPERATOR_PORT",
"-e",
"DATAPRISM_OPERATOR_REQUIREDAUDIENCE",
"-e",
"DATAPRISM_OPERATOR_REQUIREDSCOPE",
"-e",
"DATAPRISM_SOURCES_CUSTOMER_BASE_URL",
"-e",
"DATAPRISM_SOURCES_CUSTOMER_TIMEOUT",
"ghcr.io/aindriub/data-prism-server:0.7.1"
],
"env": {
"LOADER_PATH": "<LOADER_PATH>",
"DATAPRISM_SECURITY_JWT_ISSUER": "<DATAPRISM_SECURITY_JWT_ISSUER>",
"DATAPRISM_SECURITY_JWT_AUDIENCE": "<DATAPRISM_SECURITY_JWT_AUDIENCE>",
"DATAPRISM_SECURITY_JWT_JWK_SET_URI": "<DATAPRISM_SECURITY_JWT_JWK_SET_URI>",
"DATAPRISM_SECURITY_JWT_ISSUER_DISCOVERY_URI": "<DATAPRISM_SECURITY_JWT_ISSUER_DISCOVERY_URI>",
"DATAPRISM_SECURITY_CALLER_CLAIMS_PRINCIPAL": "<DATAPRISM_SECURITY_CALLER_CLAIMS_PRINCIPAL>",
"DATAPRISM_SECURITY_CALLER_CLAIMS_ROLES": "<DATAPRISM_SECURITY_CALLER_CLAIMS_ROLES>",
"DATAPRISM_SECURITY_CALLER_CLAIMS_INVESTIGATION": "<DATAPRISM_SECURITY_CALLER_CLAIMS_INVESTIGATION>",
"DATAPRISM_SECURITY_POLICY_PURPOSES": "<DATAPRISM_SECURITY_POLICY_PURPOSES>",
"DATAPRISM_SECURITYPOLICY_ROLES_INVESTIGATOR": "<DATAPRISM_SECURITYPOLICY_ROLES_INVESTIGATOR>",
"DATAPRISM_PRIVACY_PROFILE": "<DATAPRISM_PRIVACY_PROFILE>",
"DATAPRISM_PRIVACY_SCOPE_LIFETIME": "<DATAPRISM_PRIVACY_SCOPE_LIFETIME>",
"DATAPRISM_PRIVACY_HMAC_KEY_KEY_ID": "<DATAPRISM_PRIVACY_HMAC_KEY_KEY_ID>",
"DATAPRISM_PRIVACY_HMAC_KEY_ENVIRONMENT_VARIABLE": "<DATAPRISM_PRIVACY_HMAC_KEY_ENVIRONMENT_VARIABLE>",
"DATAPRISM_PRIVACY_HMAC_KEY_PROVIDER_REFERENCE": "<DATAPRISM_PRIVACY_HMAC_KEY_PROVIDER_REFERENCE>",
"DATAPRISM_AUDIT_SINK": "<DATAPRISM_AUDIT_SINK>",
"DATAPRISM_AUDIT_WRITER_ID": "<DATAPRISM_AUDIT_WRITER_ID>",
"DATAPRISM_AUDIT_FILE_PATH": "<DATAPRISM_AUDIT_FILE_PATH>",
"DATAPRISM_METRICS_SINK": "<DATAPRISM_METRICS_SINK>",
"DATAPRISM_HAZELCAST_TOPOLOGY": "<DATAPRISM_HAZELCAST_TOPOLOGY>",
"DATAPRISM_HAZELCAST_CLUSTERNAME": "<DATAPRISM_HAZELCAST_CLUSTERNAME>",
"DATAPRISM_HAZELCAST_JOIN_MODE": "<DATAPRISM_HAZELCAST_JOIN_MODE>",
"DATAPRISM_HAZELCAST_JOIN_MEMBERS": "<DATAPRISM_HAZELCAST_JOIN_MEMBERS>",
"DATAPRISM_HAZELCAST_MEMBER_PORT": "<DATAPRISM_HAZELCAST_MEMBER_PORT>",
"DATAPRISM_OPERATOR_ENABLED": "<DATAPRISM_OPERATOR_ENABLED>",
"DATAPRISM_OPERATOR_PORT": "<DATAPRISM_OPERATOR_PORT>",
"DATAPRISM_OPERATOR_REQUIREDAUDIENCE": "<DATAPRISM_OPERATOR_REQUIREDAUDIENCE>",
"DATAPRISM_OPERATOR_REQUIREDSCOPE": "<DATAPRISM_OPERATOR_REQUIREDSCOPE>",
"DATAPRISM_SOURCES_CUSTOMER_BASE_URL": "<DATAPRISM_SOURCES_CUSTOMER_BASE_URL>",
"DATAPRISM_SOURCES_CUSTOMER_TIMEOUT": "<DATAPRISM_SOURCES_CUSTOMER_TIMEOUT>"
}
}
}
}
起動コマンドdocker run -i --rm -e LOADER_PATH -e DATAPRISM_SECURITY_JWT_ISSUER -e DATAPRISM_SECURITY_JWT_AUDIENCE -e DATAPRISM_SECURITY_JWT_JWK_SET_URI -e DATAPRISM_SECURITY_JWT_ISSUER_DISCOVERY_URI -e DATAPRISM_SECURITY_CALLER_CLAIMS_PRINCIPAL -e DATAPRISM_SECURITY_CALLER_CLAIMS_ROLES -e DATAPRISM_SECURITY_CALLER_CLAIMS_INVESTIGATION -e DATAPRISM_SECURITY_POLICY_PURPOSES -e DATAPRISM_SECURITYPOLICY_ROLES_INVESTIGATOR -e DATAPRISM_PRIVACY_PROFILE -e DATAPRISM_PRIVACY_SCOPE_LIFETIME -e DATAPRISM_PRIVACY_HMAC_KEY_KEY_ID -e DATAPRISM_PRIVACY_HMAC_KEY_ENVIRONMENT_VARIABLE -e DATAPRISM_PRIVACY_HMAC_KEY_PROVIDER_REFERENCE -e DATAPRISM_AUDIT_SINK -e DATAPRISM_AUDIT_WRITER_ID -e DATAPRISM_AUDIT_FILE_PATH -e DATAPRISM_METRICS_SINK -e DATAPRISM_HAZELCAST_TOPOLOGY -e DATAPRISM_HAZELCAST_CLUSTERNAME -e DATAPRISM_HAZELCAST_JOIN_MODE -e DATAPRISM_HAZELCAST_JOIN_MEMBERS -e DATAPRISM_HAZELCAST_MEMBER_PORT -e DATAPRISM_OPERATOR_ENABLED -e DATAPRISM_OPERATOR_PORT -e DATAPRISM_OPERATOR_REQUIREDAUDIENCE -e DATAPRISM_OPERATOR_REQUIREDSCOPE -e DATAPRISM_SOURCES_CUSTOMER_BASE_URL -e DATAPRISM_SOURCES_CUSTOMER_TIMEOUT ghcr.io/aindriub/data-prism-server:0.7.1
設定が必要な環境変数
LOADER_PATHDirectory Spring Boot's PropertiesLauncher scans for extension jars; already set to /app/adapters by the image, but startup still fails with MISSING_SOURCE_ADAPTER until you bind-mount a reviewed DataSourceAdapter/IdentityResolver jar there (see the -v arguments above)
DATAPRISM_SECURITY_JWT_ISSUEROAuth2/OIDC issuer that mints the caller's JWT; required for every protected deployment
DATAPRISM_SECURITY_JWT_AUDIENCEExpected JWT audience claim for this deployment; required for every protected deployment
DATAPRISM_SECURITY_JWT_JWK_SET_URIHTTPS JWKS location used to verify caller JWTs; exactly one of this or DATAPRISM_SECURITY_JWT_ISSUER_DISCOVERY_URI is required, never both
DATAPRISM_SECURITY_JWT_ISSUER_DISCOVERY_URIAlternative HTTPS OIDC issuer-discovery location; set this instead of DATAPRISM_SECURITY_JWT_JWK_SET_URI, never both
DATAPRISM_SECURITY_CALLER_CLAIMS_PRINCIPALJWT claim name that carries the caller's principal identifier; required, must differ from the roles and investigation claims
DATAPRISM_SECURITY_CALLER_CLAIMS_ROLESJWT claim name that carries the caller's roles; required, must differ from the principal and investigation claims
DATAPRISM_SECURITY_CALLER_CLAIMS_INVESTIGATIONJWT claim name that carries the trusted investigation/case identifier; required, must differ from the principal and roles claims
DATAPRISM_SECURITY_POLICY_PURPOSESComma-separated list of permitted purposes; at least one is required
DATAPRISM_SECURITYPOLICY_ROLES_INVESTIGATORExample only — declare DATAPRISM_SECURITYPOLICY_ROLES_<ROLE> per operator-defined role (no underscore between SECURITY and POLICY: Spring Boot's map-key enumeration under a hyphenated dataprism.security-policy.roles.<role> segment only binds the concatenated prefix, verified by binding this property directly against Spring Boot 4.1.1), a comma-separated list of known MCP tool capabilities; at least one role-to-capability mapping is required
DATAPRISM_PRIVACY_PROFILEName of the reviewed privacy profile implementation to apply; required
DATAPRISM_PRIVACY_SCOPE_LIFETIMEPositive duration (e.g. 8h) a privacy scope's synthetic identities remain valid; required
DATAPRISM_PRIVACY_HMAC_KEY_KEY_IDシークレットIdentifier of the pinned HMAC key used to derive synthetic identities; required
DATAPRISM_PRIVACY_HMAC_KEY_ENVIRONMENT_VARIABLEシークレットName of the environment variable holding the HMAC key material; exactly one of this or DATAPRISM_PRIVACY_HMAC_KEY_PROVIDER_REFERENCE is required, never both, and never a literal key value
DATAPRISM_PRIVACY_HMAC_KEY_PROVIDER_REFERENCEシークレットReference to an approved secret provider holding the HMAC key material; set this instead of DATAPRISM_PRIVACY_HMAC_KEY_ENVIRONMENT_VARIABLE, never both
DATAPRISM_AUDIT_SINKAudit sink implementation: one of approved-sink, slf4j, hash-chained; required, never downgraded to no-op
DATAPRISM_AUDIT_WRITER_IDWriter/instance identity recorded on every audit entry; required
DATAPRISM_AUDIT_FILE_PATHPath to the durable, hash-chained audit log; required when DATAPRISM_AUDIT_SINK=hash-chained, refused as MISSING_AUDIT_FILE_PATH if absent for that sink, ignored otherwise
DATAPRISM_METRICS_SINKMetrics sink binding, currently only micrometer; required in production, never the framework no-op
DATAPRISM_HAZELCAST_TOPOLOGYCluster read-budget topology: embedded (shared across members that have joined one cluster; set cluster name and join mode) or single-node (enforced per process); required, never defaulted
DATAPRISM_HAZELCAST_CLUSTERNAMEHazelcast cluster name; required when DATAPRISM_HAZELCAST_TOPOLOGY=embedded, never dev, refused if set with single-node
DATAPRISM_HAZELCAST_JOIN_MODEHow cluster members find each other: tcp-ip, kubernetes or none; required when DATAPRISM_HAZELCAST_TOPOLOGY=embedded (none is an explicit single member bound to 127.0.0.1), refused if set with single-node
DATAPRISM_HAZELCAST_JOIN_MEMBERSComma-separated member addresses (host or host:port); required when DATAPRISM_HAZELCAST_JOIN_MODE=tcp-ip, otherwise unused
DATAPRISM_HAZELCAST_MEMBER_PORTHazelcast member port, default 5701, never auto-incremented; must differ from the server, management and operator ports. Member traffic is unencrypted, so keep it on a private network. Optional
DATAPRISM_OPERATOR_ENABLEDEnables the operator surface; optional, off by default
DATAPRISM_OPERATOR_PORTPort of the operator listener; required when DATAPRISM_OPERATOR_ENABLED=true, must differ from the server, management (OPERATOR_PORT_SHARED otherwise) and member ports, and has no fixed default (publish it explicitly)
DATAPRISM_OPERATOR_REQUIREDAUDIENCEJWT audience an operator token must carry; required when DATAPRISM_OPERATOR_ENABLED=true
DATAPRISM_OPERATOR_REQUIREDSCOPEJWT scope an operator token must carry; required when DATAPRISM_OPERATOR_ENABLED=true
DATAPRISM_SOURCES_CUSTOMER_BASE_URLExample only — declare DATAPRISM_SOURCES_<NAME>_BASE_URL (HTTPS) per configured source; at least one source, each with its own reviewed DataSourceAdapter bean, is required
DATAPRISM_SOURCES_CUSTOMER_TIMEOUTExample only — declare DATAPRISM_SOURCES_<NAME>_TIMEOUT (positive duration) per configured source; required alongside its base URL

ローカルサーバーにはマシン上の実行環境(Node.js 18 以上など)が必要です。設定ファイルの場所はクライアントごとに異なります。

パッケージ
ocighcr.io/aindriub/data-prism-server:0.7.1

ツール

ツール一覧はまだ取得されていません

ローカルサーバーのツールはマシン上で起動して初めて取得できます。メンテナーはまだツール一覧を提供していません。

詳細

Data Prism

Build Maven Central License: Apache-2.0 Listed on mcpservers.org

LLM エージェントや MCP クライアント向けに、企業 API のデータを仮名化するフェイルクローズ型のプライバシーレイヤーです。

Data Prism は、顧客データを保持する内部 API の前段に LLM エージェントや MCP クライアントを配置する Java/Spring チーム向けのオープンソースのプライバシーレイヤーです。プライバシースコープごとに個人データを仮名化し、分類されていないデータはすべて拒否し、ハッシュチェーン監査証跡を保持できます。

概要。 エンタープライズ AI 向けのプライバシー適用レイヤーです。プライバシースコープ内でエンティティごとに一貫した合成 ID を割り当てることで、LLM エージェントに有用で相互に関連付けられるビジネスコンテキストを提供しながら、AI の境界を越える個人データとその形式を制御します。

対象。 顧客データを保持する内部 API の前段に LLM エージェントや MCP クライアントを配置する Java/Spring のプラットフォームチームやバックエンドチーム向けです。実行中のシステムからモデルに個人データが公開されない場合、このツールは必要ありません。

ステータス:walking skeleton と S9a までのすべてのスライスが実装済みで、18 個の Maven サブモジュール(ルートの pom パッケージ化されたアグリゲーター自体を含めると、リアクター内に 19 個の Maven プロジェクト)と、合格するテストスイートを備えています。プライバシーエンジン、相関と一貫性に関する検出結果、並列 mTLS コネクター、組み込み Hazelcast ID キャッシュと読み取り予算(1 つのクラスターに参加したメンバー間でのみ共有。詳しくは複数インスタンスを参照)、セッションから導出される PrivacyContext を備えた OAuth2 リソースサーバー、監査、メトリクスはすべて実装済みで、エンドツーエンドで動作確認されています。スタンドアロンサーバーが主なデプロイ方法で、Spring Boot starter は組み込みオプションです。1 コマンドで起動できるローカル Compose クイックスタートもあります。下記の「試してみる」を参照してください。現在、get_entity_context と compare_entity_sources の 2 つの MCP ツールを提供しています。設計レビューで挙げられた残り 2 つの search_entity_data と describe_entity_model は、まだ実装されていません(docs/tools.md の「Not yet built」を参照)。永続的で追記専用のハッシュチェーン監査シンクとオフラインの AuditChainVerifier は 0.3.0 から提供されており、dataprism.audit.sink: hash-chained でオプトインできます。検証ツールは書き込み元のチェーン内の編集や削除を検出しますが、書き込み元の最新レコードの切り詰めや、プロセス起動時のレコード一式の削除は検出できません。また、ファイルへの書き込み権限をすでに持つオペレーターやその他のユーザーに対して、監査証跡が改ざんを防ぐこともありません(docs/audit.md の「What this does and does not prove」を参照)。未実装の機能:再識別のオペレーター向け操作面(判断により V1 以降に延期。docs/architecture.md#decisions-worth-knowing を参照)、Elasticsearch コネクターとその検索ツール。未着手の項目については docs/plan/PLAN.md を参照してください。

課題

ある組織が、複数のシステムに分散する最新のビジネスデータを LLM に調査させたいと考えています。しかし、モデルに API への直接アクセスを与えることは許容できません。API には個人情報や機密データが含まれ、各システムで同じエンティティが異なる形で表現されており、元の識別子を渡すと、その後のあらゆる処理でセッションをまたいだ相関が可能になるからです。

明白な解決策は、機密データをすべて編集することですが、これでは調査が成り立ちません。3 つのシステムにある同一人物の名前がすべて [REDACTED] になれば、モデルは 1 人を見ているのか、3 人を見ているのか判断できません。

Data Prism の機能

Data Prism は両者の間に位置し、混同しやすい次の 2 つの処理を行います。

ID を一貫させます。 1 つのサブジェクトには、すべてのソースで同じ合成 ID が割り当てられます。これは (scope, subject, namespace, algorithm version, key) から決定論的に導出されます。ランダムではなく、平文で保存されることもなく、キャッシュなしで再現できます。3 つのシステムに同じ人物が存在する場合、モデルには 1 人の人物として認識されます。

データの不整合はそのまま残し、それを明示します。 3 つのシステムで名前が一致しない場合、回答には不一致を示す所見が含まれます。このプラットフォームは、実際よりも企業データが整っているように見せることはありません。この違いこそが、プロジェクトの要点です。

ID の表現は一貫するようになります。基盤となるデータの不整合は、見えにくくなるのではなく、より見えやすくなります。

仮名はスコープごとに異なります。同じ人物でも、異なる 2 つの調査では別々の合成 ID が割り当てられるため、意図せずケース間で相関付けられることはありません。

対象外のもの

API ゲートウェイでも、ETL プラットフォームでも、マスターデータシステムでも、ID プロバイダーでも、エンティティ解決エンジンでもありません。相関付けには、文書化された SPI の背後で、ソースがすでに共有しているキーが必要です。ビジネスドメインは持ちません。例示用アプリケーションの外部には、Customer、Taxpayer、Employee の型は存在しません。

匿名化ではありません。 GDPR 第 4 条第 5 項では、仮名化されたデータも引き続き個人データです。Data Prism の出力をサードパーティモデルに送信することは、引き続きデータ処理にあたり、適法な根拠、DPIA、またプロバイダーが EU 域外にある場合は移転の仕組みが必要です。このプラットフォームは情報の露出を減らしますが、義務をなくすものではありません。

試してみる

実際のプライバシーエンジンが実際の MCP 呼び出しに応答する様子を確認する最速の方法です。ローカル JDK も Maven のインストールも不要で、コマンド 1 つで実行できます。

docker compose up

公開済みの ghcr.io/aindriub/data-prism-quickstart-<name> イメージを取得し(QUICKSTART_IMAGE_TAG=0.7.0 でバージョンを固定できます。すべてのイメージをソースからビルドするには、代わりに docker compose -f compose.yaml -f compose.build.yaml up --build を実行してください)、スタンドアロンサーバー、合成フィクスチャ API、ローカル HTTPS JWT 発行者を起動します。これにより、エージェント互換の get_entity_context 呼び出しが仮名化された応答を返すことを確認できます。手順は docs/quickstart.mdをご覧ください。また、 docs/agents/を通じて、ご自身のエージェントクライアントをこのスタックまたは実際のデプロイ環境に接続できます。

デモを確認したら、ご自身の API を保護しましょう。docs/quickstart.md の最後には「次のステップ」セクションがあり、 実際の JSON REST API から動作する get_entity_context 呼び出しまでを YAML のみで解説する docs/protect-your-own-api.mdを案内しています。

MCP レジストリでこのプロジェクトを見つけた場合

そこに掲載されている ghcr.io/aindriub/data-prism-server イメージは、linux/amd64 と linux/arm64 に対応するマルチアーキテクチャのマニフェストリストとして公開されており、それぞれのアーキテクチャでネイティブにビルド、検証されています。Apple Silicon やその他の arm64 ホストで docker run を実行すると、エミュレーションなしで arm64 イメージが直接取得されます。

どちらのアーキテクチャでも、コマンド 1 つでインストールできるわけではありません。docker run だけでは、起動を拒否するサーバーが起動します。DataPrismContractValidator は、設定されたソースごとにレビュー済みの DataSourceAdapter Bean を要求し、DataPrismProperties.validate() は完全なデプロイ設定(JWT の issuer/audience/JWKS、呼び出し元クレームのマッピング、セキュリティポリシー、HMAC キーの参照、監査シンク、メトリクスシンク、Hazelcast トポロジー)を要求します。これらはどちらもイメージには含まれていません。何らかの処理を提供する前に、運用者自身が次の 2 つを用意する必要があります。

  • 保護する API ごとの、レビュー済みの DataSourceAdapter(および IdentityResolver)jar。イメージのローダーパスにマウントしてください。
  • dataprism.* の設定項目に準拠するデプロイ設定。

両方の完全な仕様については、正式な資料である docs/configuration.mdを参照してください。上記の「試してみる」セクションは評価用のローカル Compose フィクスチャであり、このイメージやその設定を使うものではありません。

ドキュメント

ユーザー向けドキュメント一式は、https://aindriub.github.io/data-prism/でも公開されており、レンダリング済みの状態で検索できます。

ユーザー向けドキュメント

各行から、サイトのページと、そのページの元になっているリポジトリ内のファイルに移動できます。

ドキュメントサイト内容
docs/quickstart.mdquickstart/1つのコマンドで実行できる、ローカルのComposeデモです。まずはこちらをご覧ください
docs/protect-your-own-api.mdprotect-your-own-api/フィクスチャの代わりに、自分のAPIをData Prismに接続する方法
docs/configuration.mdconfiguration/dataprism.*のデプロイ設定仕様について、信頼できる完全な情報を掲載しています
docs/tools.mdtools/提供されている各MCPツールが受け取る入力と返す出力、および実例
docs/extending.mdextending/新しいデータソースを保護する方法:レビュー済みのJavaアダプター、または設定駆動のJSON RESTモード
docs/audit.mdaudit/ハッシュチェーン監査証跡に記録される内容と、その検証方法
docs/architecture.mdarchitecture/モジュール構成、依存関係のルール、越えてはならない境界、日付入りの決定事項
docs/agents/agents/MCP エージェントクライアントを、ローカルフィクスチャまたは認証済みリモートに接続する方法
docs/agents/stdio.mdagents/stdio/ローカルstdioフィクスチャのワークフロー:JWT、ネットワーク呼び出し、データソースシステムを使わずに、実際のMCPツールを呼び出します
docs/agents/remote-http.mdagents/remote-http/実際のMCPエンドポイントを使用する、認証済みStreamable HTTPのワークフローです。開発用のバイパスはありません
docs/faq.mdfaq/仮名化、PII検出、Javaの要件、監査証跡、プロンプトインジェクションについて、端的に回答します
docs/comparison.mdcomparison/Data PrismとPresidio、LLM Guard、NeMo Guardrails、MCPゲートウェイまたはプロキシとの比較
docs/use-cases/pseudonymise-customer-data-spring-boot.mduse-cases/pseudonymise-customer-data-spring-boot/LLMエージェントがSpring Boot APIの顧客データを参照する前に、そのデータを仮名化する方法
docs/use-cases/gdpr-data-minimisation-mcp.mduse-cases/gdpr-data-minimisation-mcp/MCPツールにおけるGDPRのデータ最小化
docs/use-cases/consistent-pseudonyms-across-systems.mduse-cases/consistent-pseudonyms-across-systems/IDを公開せずに、システム間で同じ顧客を識別できるようにする方法
CHANGELOG.mdchangelog/Keep a Changelog形式で、バージョンごとのData Prismの主な変更点をすべて記載しています
内部/プロジェクト作業用ドキュメント

サイトでは公開されていません。

ドキュメント内容
docs/design-review.md理由を含む仕様の修正。正式な根拠
docs/development-plan.mdスライスの順序と規模、および最初のスライスを阻む決定事項
docs/pack.md元の仕様。置き換え済みで、現在は履歴資料です。実装されなかったツールについて説明しています
docs/conventions.mdコードスタイルと、差分が満たす必要のあるプライバシールール
docs/workflow.md作業の分割方法と進め方
docs/plan/PLAN.md未対応項目とその優先順位
docs/plan/HISTORY-INDEX.md実装した内容と、その把握にかかったコスト

docs/plan/PLAN.md は作業キューです。外部からの依頼はすべて GitHub Issues を窓口としてください。PLAN.md ではなく、Issue を作成してください。

技術スタック

Java 21 バイトコード、Spring Boot 4.1.x、Maven マルチモジュール、Hazelcast、公式 MCP Java SDK を介した Model Context Protocol。ライブラリモジュールには Java 21 以降と Spring Boot 4.1.x が必要です。公開イメージは Java 25 で実行されます。Boot 3 の利用者は 0.4.x を引き続き使用してください。

アーティファクトはグループ io.github.aindriub のもとで data-prism-<module> として公開され、パッケージのルートは io.github.aindriub.dataprism です。

ビルドと実行

ビルドには JDK 21 以降(ビルドでは --release 21 を使用するため、ローカルの JDK が新しくても問題ありません。CI では 21 と 25 でビルドします)と Maven >= 3.6.3(pom.xml:343-345 で要件を強制しています)が必要です。独自の mvn を使用する場合は、これらを用意してください。 リポジトリには Maven Wrapper が含まれており、初回実行時に固定バージョンの Maven 3.9.16(チェックサム検証済み)をダウンロードするため、ローカルに Maven をインストールする必要はありません。

./mvnw -B --no-transfer-progress verify     # Windows: mvnw.cmd -B --no-transfer-progress verify

これは CI(.github/workflows/build.yml)で実行されるものと同じコマンドです。18 個すべてのサブモジュールとルートの集約プロジェクトをビルドし、すべてのテストスイート、ArchUnit の境界ルール、および Jackson 2(jackson-annotations を除く)を禁止してクラスパスを Jackson 3 に保つ Enforcer ルールを実行します。

data-prism-server は主要な実行可能ディストリビューションです。/health の死活監視プローブは公開されており、デプロイの詳細情報を含みません。設定された MCP パス(通常は /mcp)には、検証済みのベアラー JWT が必要です。このサーバーには、ソーススキーマ、フィクスチャアダプター、鍵は意図的に含まれていません。docs/configuration.md に記載された設定と、設定した各ソース用のレビュー済みアダプターを用意してください。アダプターを用意する方法は 2 つあります。注釈付きレスポンスモデルを持つ Java アダプター拡張(一般的な方法で、ネストしたオブジェクトや任意のトランスポートに対応)と、ソースのレスポンスがフラットな JSON オブジェクト 1 つの場合に使える、公開済みの data-prism-connectors-rest アーティファクトです。後者は -Dloader.path で読み込まれ、すべて YAML で設定でき、Java は不要です。両方の方法と、設定駆動型の方法がどこまで対応するか(ネストしたオブジェクトには決して入りません)については、docs/extending.md を参照してください。

アダプター拡張は、必要な DataSourceAdapter Bean と、明示的にレビュー済みの IdentityResolver を宣言する Spring Boot 自動設定を含む通常の JAR です(すべてのソースが実際に同じ識別子を共有する場合に限り、PassThroughIdentityResolver を使用してください)。この設定を META-INF/spring/org.springframework.boot.autoconfigure.AutoConfiguration.imports に登録してから、レビュー済みの拡張 JAR をサーバーの再ビルドなしで読み込みます。

LOADER_PATH=/opt/data-prism/extensions \
  java -jar data-prism-server/target/data-prism-server-0.7.0.jar \
  --spring.config.additional-location=file:/etc/data-prism/application.yaml

設定、シークレット、運用バインディング、または設定されたアダプターの正確なセットが不足している場合、プロセスは起動を拒否します。data-prism-integration-tests はリアクターのモジュール横断型統合テストスイートであり、フィクスチャ専用のデモではありません。また、デプロイ可能なアーティファクトには決してパッケージされません。これを実際にローカルで実行できるコンテナーのパッケージ化と Compose によるオーケストレーションも用意されています。上記の「お試しください」と docs/quickstart.md を参照してください。

貢献

CONTRIBUTING.md をご覧ください。要点は、プルリクエストを送る前に docs/conventions.md を読み、そこに記載されたプライバシー規則が 文字どおり厳格に適用されることをご了承ください。

ライセンス

Apache License 2.0 — LICENSE と NOTICE をご覧ください。

コメント

MCP は初めてですか?

プロトコルの概要から最初のサーバーの導入まで、よくある疑問にまとめて答えます。

AI アプリケーションが外部のツールやデータソースに統一的な方法で接続するためのオープンなプロトコルです。クライアントはモデルとの対話を担い、MCP サーバーはツール・リソース・プロンプトテンプレートを提供します。標準メッセージでやり取りするため、1 つのサーバーを複数のクライアントで再利用できます。