Gadoes turns Mike into a research switchboard

Users can now connect their own legal data sources and choose which ones the AI consults on each question.

searchintegration

Gadoes has built a connection layer that lets each user wire in outside legal research sources and toggle them per query. The launch set leans international: CourtListener and GovInfo for US case law and government documents, EUR-Lex for European law, Al-Meezan for Qatari legislation, and italaw and ICSID for investment-arbitration materials, with more sources queued as "connect" placeholders.

The useful part is the control. A picker lets you narrow the AI to a chosen handful of sources for a given question, rather than always querying everything you've connected. Users supply their own credentials for each source, and Gadoes stores those keys encrypted with a built-in path for rotating them - a sensible call when people are handing over third-party access.

So what Worth a look for arbitration and cross-border teams who want one assistant that searches their actual sources, on their own accounts, scoped per question.

View this fork on GitHub →

Spotted something wrong? Or know the PR text has fresher detail than the writeup above?

Commits in this thread

6 commits from Gadoes/dispumike, oldest first. Source extracted verbatim from the harvested git log.

SHA Subject Author Date
da870cef Chunk 6: Source Connections DB + User Settings UX + Key Encryption Gadoes 2026-05-02 ↗ GitHub
commit body
- Add migrations: mcp_servers (seed data for 12 sources), mcp_connections,
  user_profiles column additions (courtlistener_api_key, govinfo_api_key, is_admin)
- Implement AES-256-GCM encryption in backend/src/lib/mcp/encryption.ts
  (encryptApiKey / decryptApiKey, key from MCP_KEY_ENCRYPTION_KEY env var)
- Add REST API: GET/POST/DELETE /user/mcp-connections with key encryption on write
- Extend getUserApiKeys() and add getMcpApiKey() with env fallback pattern
- Add UserApiKeys.courtlistener and .govinfo fields to llm types
- Create LegalSourcesPage frontend settings page (grouped by region, toggle +
  API key input per server, tier-based 'coming soon' badge)
- Add 'Legal Sources' tab to account settings layout
- 13 backend unit tests (encryption round-trip, format, edge cases)
- 13 frontend component tests all passing; tsc --noEmit clean

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
bb72208c Merge chunk-6-source-connections into main Gadoes 2026-05-02 ↗ GitHub
488ea9b4 Chunk 7: Source Picker Popover UI Gadoes 2026-05-02 ↗ GitHub
commit body
- Create SourcePickerPopover component with search, region grouping, state
  badges (Always on / Connected / Connect / Permission required), region_glyph
  display, and checkbox hooks for Chunk 8 scope toggling
- Create SourcesPill component showing 'Sources · N active' in chat toolbar
- Integrate SourcesPill + SourcePickerPopover into ChatInput.tsx
- Closes on outside click and Escape key
- Footer 'Add custom MCP server' placeholder (disabled for v1)
- 16 component tests covering popover open/close, region order, search
  filtering, state badges, region_glyph, and checkbox callbacks
- tsc --noEmit passes; all 51 frontend tests pass

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
c8e13dac Merge chunk-7-source-picker into main Gadoes 2026-05-02 ↗ GitHub
64ec30ab Chunk 8: Per-Query Scope Toggling Gadoes 2026-05-02 ↗ GitHub
commit body
Backend:
- Add mcpScope?: string[] | null to POST /chat and POST /projects/:projectId/chat
- Pass mcpScope to runLLMStream(); filter MCP server tools when scope is set
  (scopeSet filter applied after open-circuit filter, empty array = no filter)

Frontend:
- Create useScopeState hook: activeSources, scopeMode (per-message/sticky),
  toggleSource, clearScope, afterSend, mcpScopePayload
- Add mcpScope? field to streamChat() and streamProjectChat()
- Create ScopeIndicator component: 'Scope: N sources for this thread' + Clear

Tests:
- 7 backend unit tests: mcpScope filtering, open-circuit interaction
- 12 frontend unit tests: useScopeState hook (toggle, sticky/per-message modes,
  clearScope, afterSend, mcpScopePayload computation)
- All 57 backend tests and 63 frontend tests passing
- tsc --noEmit clean

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
e1df3784 Merge chunk-8-scope-toggling into main Gadoes 2026-05-02 ↗ GitHub

Capture this thread into my fork

Download a single Markdown prompt that tells Claude how to port every commit above into your working tree — adapting paths and structure to match your repo. Run it via claude -p < capture-thread-30.md from inside the repo you want the changes in.

⬇ Download capture-thread-30.md