Skip to content

Development

Logan Besecker edited this page Oct 14, 2026 · 2 revisions

Development

Phoenix 1.8 and LiveView, on PostgreSQL.

mix setup
mix phx.server
mix test

CI rejects unformatted code, so run mix format before pushing.

Where things live

Module Responsibility
McpRegistry.Registry listings and the queries behind every page
McpRegistry.Registry.Manifest server.json ⇄ listing
McpRegistry.OfficialRegistry the mirror of the official registry
McpRegistry.Probe the MCP client that reads tools, prompts and resources
McpRegistry.Documents the llms.txt and AGENTS.md fetcher
McpRegistry.Changes changelog recording, and the rules on what is not a change
McpRegistry.Registry.Logo which logo a listing gets
McpRegistry.Registry.Clients each client's real configuration format
McpRegistryWeb.Submissions the one path every submission takes, so rate limits and auth stay consistent
McpRegistryWeb.MCP.Tools the MCP tools — their descriptions are read by models, so keep them precise

Conventions

  • Styling: Tailwind with semantic tokens only — bg-canvas, text-ink, border-rule, bg-brand. No dark: variants and no hard-coded colours; the tokens carry both themes.
  • Analytics: only through McpRegistry.Analytics.track/2, and never with request parameters, search text or credentials in an event.
  • Google Analytics: the gtag.js snippet lives in one component, Layouts.google_tag/1. The root layout and the standalone error page both render it, so every page, 404s included, is counted. Change the measurement ID there and nowhere else.
  • Listing origin (local, seed, official) is never set from user input.
  • External HTTP in tests goes through Req.Test stubs; nothing in the suite touches the network.
  • One change, one issue, one branch, one pull request.

Licence

Apache 2.0.

Clone this wiki locally