feat: add Do Better Norge MCP server — token system, runtime API, interactive setup page

- UserMcpTokens: per-user SHA256-hashed token mint/validate/revoke (Plus/Pro only)
- DbnMcpRuntime: 19 MCP tools (search, ask, summarize, timeline, redact, translate,
  legal_analysis, korrespond, barnevernet_analyze, advocate_brief, deep_research,
  discrepancy_find, transcribe_audio, corpus_stats, list_documents, get_document,
  citation_graph, case_workbench_plan, save_to_case)
- api/mcp/user/: session/tools/invoke HTTP endpoints with Bearer token auth
- api/mcp-tokens.php: token create/revoke/list REST API
- mcp.php: interactive setup page with token management, 5-client config tabs,
  auto-fill on token creation, tool catalog grid, privacy notice
- account.php: simplified MCP section with link to mcp.php
- nav.php: MCP nav link
- .htaccess: Authorization header passthrough, MCP route rewrite, CORS

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
This commit is contained in:
2026-05-24 11:01:13 +02:00
parent 0bb828fb98
commit c997f204b5
9 changed files with 1642 additions and 0 deletions
+8
View File
@@ -48,6 +48,14 @@ $_navReturnUrl = urlencode($_navPath);
<?= $_navOnDash ? 'aria-current="page"' : '' ?>>
<?= htmlspecialchars(dbnToolsT('nav_dashboard', $_navLang)) ?>
</a>
<?php $_navOnMcp = ($_navPath === '/mcp.php'); ?>
<a class="dbn-nav__link<?= $_navOnMcp ? ' is-active' : '' ?>"
href="/mcp.php"
role="menuitem"
<?= $_navOnMcp ? 'aria-current="page"' : '' ?>>
MCP
</a>
</div>
<div class="dbn-nav__right">