content-validity-index-mcp
Integrates with Authentik as an identity provider for OAuth authentication, enabling secure access to the MCP server and forwarding user tokens to the backend.
Click on "Deploy Server".
Wait a few minutes for the server to deploy. Once ready, it will show a "Started" state.
In the chat, type
@followed by the MCP server name and your instructions, e.g., "@content-validity-index-mcp Calculate CVI for instrument 'Employee Engagement'"
That's it! The server will respond to your query, and you can continue using it as needed.
Here is a step-by-step guide with screenshots.
content-validity-index-mcp
MCP Server berbasis FastMCP untuk content-validity-index-backend. Memungkinkan AI client (Claude Desktop, Claude Code, Claude Web) menelusuri instrumen, item, dimensi, penugasan expert, dan menghitung Content Validity Index (CVI) lewat antarmuka MCP standar.
Bisa dipakai lewat tiga kanal — stdio, Claude Code, dan Claude Web (claude.ai) — dengan otentikasi memakai Authentik sebagai identity provider (POLA B: issuer yang sama dengan backend, token user diteruskan ke backend).
Arsitektur auth (POLA B)
Backend & web app content-validity-index sudah memakai Authentik. MCP ini konsisten dengan keduanya:
Claude.ai ──OAuth Authentik──▶ MCP (AuthentikProvider, issuer = backend)
Claude Code/VS ──API key / token──▶ MCP (BearerApiKeyVerifier)
MCP ──teruskan Bearer <token-user>──▶ content-validity-index-backendToken diverifikasi seperti backend: RS256 via JWKS (OIDC discovery dari issuer), issuer dicek, audience tidak diverifikasi.
Klaim
groupsdipetakan ke role dengan logika yang sama:cvi-admin→ admin, selain itu → expert.Otorisasi (admin/expert) ditegakkan backend — MCP hanya meneruskan token.
Related MCP server: SNOMED CT MCP Server
Cara pakai per kanal
1. stdio — Claude Desktop / Claude Code lokal
Client men-spawn proses langsung. Untuk stdio, token user diambil dari
BACKEND_API_TOKEN (token Authentik milik Anda).
{
"mcpServers": {
"content-validity-index": {
"command": "uvx",
"args": [
"--from",
"git+https://github.com/cakrawala-tumbuh/content-validity-index-mcp@v0.1.0",
"content-validity-index-mcp"
],
"env": {
"BACKEND_API_BASE_URL": "https://cvi-api.example.com",
"BACKEND_API_TOKEN": "<token-authentik-anda>"
}
}
}
}Atau via Docker (stdio): command: "docker",
args: ["run","--rm","-i","-e","MCP_TRANSPORT=stdio","-e","BACKEND_API_BASE_URL=...","-e","BACKEND_API_TOKEN=...","ghcr.io/cakrawala-tumbuh/content-validity-index-mcp:latest"].
2. Claude Code
# stdio
claude mcp add content-validity-index -- \
uvx --from "git+https://github.com/cakrawala-tumbuh/content-validity-index-mcp@v0.1.0" \
content-validity-index-mcp
# remote (server HTTP yang sudah berjalan)
claude mcp add --transport http content-validity-index https://mcp.example.com/mcp3. Claude Web (claude.ai) — remote, WAJIB OAuth Authentik
Jalankan server sebagai service HTTP di URL publik HTTPS, lalu daftarkan sebagai Custom Connector di claude.ai. Memerlukan konfigurasi Authentik.
docker run -d -p 8000:8000 \
-e MCP_BASE_URL=https://mcp.example.com \
-e AUTHENTIK_ISSUER_URL=https://auth.example.com/application/o/cvi/ \
-e AUTHENTIK_CLIENT_ID=... -e AUTHENTIK_CLIENT_SECRET=... \
-e AUTHENTIK_ADMIN_GROUP=cvi-admin -e AUTHENTIK_EXPERT_GROUP=cvi-expert \
-e BACKEND_API_BASE_URL=https://cvi-api.example.com \
ghcr.io/cakrawala-tumbuh/content-validity-index-mcp:latestDirilis via GitHub (GitHub Release + image GHCR). Tidak tersedia di PyPI. Install dari sumber:
pip install "git+https://github.com/cakrawala-tumbuh/content-validity-index-mcp@v0.1.0".
Otentikasi (Authentik)
Server memilih auth otomatis dari environment:
Mekanisme | Untuk | Aktif jika |
OAuth Authentik | Claude Web / browser |
|
API Key statis | VS Code / CLI |
|
(tanpa auth) | stdio / jaringan lokal | tidak ada yang diisi |
Buat OAuth2/OIDC Provider + Application di Authentik (Redirect URI
https://<MCP_BASE_URL>/auth/callback, scope openid profile email groups),
pakai issuer/slug yang sama dengan backend, lalu isi AUTHENTIK_*. Kontrol
akses dilakukan via Policy Binding di Authentik dan role dari groups.
Konfigurasi (environment)
Variabel | Default | Keterangan |
|
| Base URL backend (tanpa |
| — | Token Authentik untuk pemakaian stdio/lokal |
|
|
|
|
| bind saat http/sse |
| — | URL publik (wajib untuk OAuth Authentik) |
| — | Issuer OIDC (sama dengan backend) |
| — | Kredensial OAuth2 Provider |
|
| Group → role admin |
|
| Group → role expert |
| — | API key untuk klien non-OAuth |
Deployment cloud memakai uvicorn:
uvicorn content_validity_index_mcp.asgi:app --host 0.0.0.0 --port 8000.
Tools
Tool | Deskripsi |
| Sinkronkan & tampilkan profil + role user (POST |
| Daftar instrumen yang dapat diakses user |
| Detail satu instrumen |
| Daftar item pada instrumen |
| Daftar dimensi/domain pada instrumen (termasuk |
| Buat dimensi/domain baru, termasuk warna latar |
| Perbarui dimensi/domain, termasuk warna latar |
| Hapus dimensi/domain dari instrumen (admin) |
| Hitung hasil CVI (I-CVI, S-CVI) sebuah instrumen (admin) |
| Daftar penugasan penilaian milik expert |
| Daftar rating pada sebuah penugasan |
Pengembangan
pip install -e .
python -m content_validity_index_mcp # jalankan lokal (stdio)
make test # gate test (lint + unit) di DockerLisensi
MIT.
Available Tools
11 toolscalculate_cviA
Hitung hasil Content Validity Index (CVI) sebuah instrumen.
Mengembalikan I-CVI per item, S-CVI/Ave, S-CVI/UA, dan interpretasinya berdasarkan penilaian para expert. Memerlukan akses admin di backend.
Inputs: instrument_id (required). Returns: object
create_instrument_domainB
Buat dimensi/domain baru pada sebuah instrumen (khusus admin).
Inputs: instrument_id (required), name (required), construct_definition, behavioral_indicator_example, +2 more. Returns: object
delete_instrument_domainA
Hapus dimensi/domain dari instrumen (khusus admin).
Item yang terkait domain ini akan kehilangan referensi domain-nya
(domain_id menjadi null), bukan ikut terhapus.
Inputs: instrument_id (required), domain_id (required). Returns: object
get_instrumentB
Ambil detail satu instrumen berdasarkan ID.
Inputs: instrument_id (required). Returns: object
list_assignment_ratingsB
Daftar penilaian (rating) pada sebuah penugasan.
Inputs: assignment_id (required). Returns: result
list_instrument_domainsB
Daftar dimensi/domain (beserta definisi konstruk) pada instrumen.
Setiap domain menyertakan background_color (hex #RRGGBB atau
null), yaitu warna latar dimensi yang dipakai untuk membedakan item
antar-dimensi pada tabel penilaian expert.
Inputs: instrument_id (required). Returns: result
list_instrument_itemsB
Daftar item (butir) pada sebuah instrumen.
Inputs: instrument_id (required). Returns: result
list_instrumentsA
Daftar instrumen penelitian yang dapat diakses user.
Hasil difilter backend sesuai role: admin melihat semua instrumen, expert melihat instrumen yang ditugaskan kepadanya.
Inputs: skip, limit. Returns: result
list_my_assignmentsA
Daftar penugasan penilaian (assignment) milik user expert saat ini.
Returns:
List penugasan expert, atau dict error bila gagal.
Inputs: no named parameters. Returns: result
update_instrument_domainA
Perbarui dimensi/domain pada instrumen (khusus admin).
Hanya field yang diisi (non-null) yang dikirim ke backend; field yang dibiarkan kosong tidak diubah. Untuk mengosongkan sebuah field, gunakan antarmuka web (tool ini tidak mengirim nilai null eksplisit).
Inputs: instrument_id (required), domain_id (required), name, construct_definition, +3 more. Returns: object
whoamiA
Ambil profil user saat ini dan sinkronkan dari Authentik.
Memanggil POST /api/v1/auth/sync di backend: memverifikasi token
Authentik, menyinkronkan data user (email, nama, role dari groups)
ke database, lalu mengembalikan profil tersinkron. Berguna untuk
mengetahui identitas dan role (admin/expert) sebelum memakai
tool lain.
Returns:
Dict profil user (id, email, full_name, role, dst.),
atau dict error bila gagal.
Inputs: no named parameters. Returns: object
Tool Schema Changelog
Recent tool additions, removals, and schema changes observed during successful MCP inspections.
Loading tool schema changelog…
TDQS
Scored across 11 tools
Each tool has a clearly distinct purpose: domain CRUD, list instruments/domains/items/assignments/ratings, calculate CVI, get instrument, and whoami. No overlapping functionality.
Tool names consistently follow a verb_noun pattern in snake_case (e.g., create_instrument_domain, list_instruments). The only exception is 'whoami', which is a widely accepted idiom.
With 11 tools covering instruments, domains, items, assignments, ratings, user info, and CVI calculation, the count is well-scoped for the domain without being overwhelming or insufficient.
The set lacks CRUD for instruments and items (only get and list are provided). This creates notable gaps, as users cannot create or update these core entities via the MCP server.
Maintenance
Related MCP Connectors
NIH Clinical Tables Search Service MCP.
Evidence-readiness MCP server: validate, audit, and score briefs, memos, and evidence packs.
A paid remote MCP for AI SDK data query MCP, built to return verdicts, receipts, usage logs, and aud
A paid remote MCP for AI SDK eval dashboard, built to return verdicts, receipts, usage logs, and aud
Related MCP Servers
- AlicenseAqualityDmaintenanceProvides validated clinical scoring tools for AI agents via MCP, with evidence-based calculators and smart tool discovery.65Apache 2.0
- AlicenseNot gradedqualityDmaintenanceEnables querying and browsing SNOMED CT medical terminology concepts, including search, details, and hierarchy navigation via MCP tools.3MIT
- AlicenseCqualityDmaintenanceMCP server for retrieving clinical standard content from the CDISC Library, supporting controlled terminology, ADaM, SDTM, CDASH, SEND metadata, and search.317MIT
- AlicenseNot gradedqualityBmaintenanceEnables AI clients to discover, search, retrieve, and read supporting files from a centrally published, versioned skill registry through four read-only MCP tools.30 npmMIT