Privacy layer for enterprise APIs; refuses to start without a reviewed adapter jar per source
npx @getmcp/cli add io.github.AindriuB/data-prismRequires Docker Engine. Community-contributed server. Review source before installing.
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_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 3.5.16), 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_IDIdentifier of the pinned HMAC key used to derive synthetic identities; required
DATAPRISM_PRIVACY_HMAC_KEY_ENVIRONMENT_VARIABLEName 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_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_METRICS_SINKMetrics sink binding, currently only micrometer; required in production, never the framework no-op
DATAPRISM_HAZELCAST_TOPOLOGYCluster read-budget topology: embedded (shared across the cluster) or single-node (enforced per process); required, never defaulted
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
Config file: ~/Library/Application Support/Claude/claude_desktop_config.json
{
"mcpServers": {
"io.github.AindriuB/data-prism": {
"command": "docker",
"args": [
"{adapter_jar_host_path}:/app/adapters/{adapter_jar_name}",
"{config_host_path}:/app/config/application.yaml",
"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_METRICS_SINK",
"-e",
"DATAPRISM_HAZELCAST_TOPOLOGY",
"-e",
"DATAPRISM_SOURCES_CUSTOMER_BASE_URL",
"-e",
"DATAPRISM_SOURCES_CUSTOMER_TIMEOUT",
"ghcr.io/aindriub/data-prism-server:0.2.0"
],
"env": {
"LOADER_PATH": "/app/adapters",
"DATAPRISM_SECURITY_JWT_ISSUER": "",
"DATAPRISM_SECURITY_JWT_AUDIENCE": "",
"DATAPRISM_SECURITY_JWT_JWK_SET_URI": "",
"DATAPRISM_SECURITY_JWT_ISSUER_DISCOVERY_URI": "",
"DATAPRISM_SECURITY_CALLER_CLAIMS_PRINCIPAL": "",
"DATAPRISM_SECURITY_CALLER_CLAIMS_ROLES": "",
"DATAPRISM_SECURITY_CALLER_CLAIMS_INVESTIGATION": "",
"DATAPRISM_SECURITY_POLICY_PURPOSES": "",
"DATAPRISM_SECURITYPOLICY_ROLES_INVESTIGATOR": "",
"DATAPRISM_PRIVACY_PROFILE": "",
"DATAPRISM_PRIVACY_SCOPE_LIFETIME": "",
"DATAPRISM_PRIVACY_HMAC_KEY_KEY_ID": "",
"DATAPRISM_PRIVACY_HMAC_KEY_ENVIRONMENT_VARIABLE": "",
"DATAPRISM_PRIVACY_HMAC_KEY_PROVIDER_REFERENCE": "",
"DATAPRISM_AUDIT_SINK": "",
"DATAPRISM_AUDIT_WRITER_ID": "",
"DATAPRISM_METRICS_SINK": "",
"DATAPRISM_HAZELCAST_TOPOLOGY": "",
"DATAPRISM_SOURCES_CUSTOMER_BASE_URL": "",
"DATAPRISM_SOURCES_CUSTOMER_TIMEOUT": ""
}
}
}
}