Service Catalog & API Context · For Engineering

A live service catalog and API context layer, generated from your code

Deterministic static analysis builds a continuously fresh inventory of every service, every API, every field, and every downstream consumer. Centralized across your org, or local on a single repo. Used by platform engineers, technical PMs, and AI coding agents.

service-catalog-v47-FINAL-actual-FINAL.xlsx File • Edit • View • Last saved by alex.p 6 weeks ago Service Owner Endpoint Status Updated checkout-svcTeam Orders/v1/checkoutlive2025-11 cart-svc??/v1/cart (stale?)stale?2024-08 payment-svcTeam Pay/v1/paylive2026-02 user-svcTeam Identityunknownunknown2025-04 notif-svc[deleted?]404missing2024-11 currency-svcTeam Pay/v1/fxlive2026-01 recommend-svc??/v2/reco (was v1?)stale?2025-07 shipping-svcTeam Orders/v1/shiplive2025-12 ad-svc????2024-09 email-svcTeam Growth/v1/emaillive2025-10 TODO: confirm w/ Sara does notif-svc still exist? also ad-svc owner = ??? HoundDog Service Catalog refreshed on commit a3f2e91 • 2 min ago 10 services SERVICE OWNER CONSUMERS UPDATED CheckoutServiceorders-team3 callersa3f2e91 CartServiceorders-team2 callers5d1bc04 PaymentServicepay-team1 callera3f2e91 UserServiceidentity-team6 callersb9e1a73 CurrencyServicepay-team4 callersa3f2e91 ShippingServiceorders-team1 caller7c4f9d2 RecommendationSvcdiscovery-team2 callersa3f2e91 AdServicegrowth-team1 callere8a2f51 EmailServicegrowth-team3 callersa3f2e91 NotificationServicegrowth-team2 callersa3f2e91
The Problem

No one in your org has an accurate picture of your services

API schemas describe contracts. They do not describe who consumes them, which fields are still used, or what breaks when something changes. The teams that need that picture most are improvising.

API specs do not describe consumers

OpenAPI, protobuf, and GraphQL schemas tell you what an API is. They do not tell you which services call it, which fields are touched, or what fails when you change it.

Technical PMs maintain catalogs in spreadsheets

The spreadsheet goes stale the moment a PR merges, and the next planning cycle starts from guesswork.

Cross-repo change impact is tribal knowledge

"Who calls this?" gets asked in Slack and answered with a half-remembered service name. The real answer lives across millions of lines and dozens of repos, with no one source of truth.

What You Get

A service catalog, generated and refreshed by CI

The catalog is built by a deterministic static analyzer that reads your code on every pull request. No manual data entry. No nightly batch that lags reality. No "please update the wiki" Slack pings.

01

Services & owners

Every service in every repo, with language, protocol, and code-owner attribution pulled from the source tree.

02

APIs & fields

Every endpoint, RPC, query, mutation, and field, extracted from protobuf, OpenAPI, GraphQL schemas, and handler code.

03

Consumers & call sites

For every API, the exact list of services that call it and the line numbers where they call it. No grepping.

04

Cross-repo dependency graph

A directed graph of service-to-service relationships, queryable through CLI, MCP, or a visual viewer.

Worked Example

Deprecating street_address on the shared Address message

Here's an example based on the Google Cloud Online Boutique microservices demo (eleven polyglot microservices, gRPC over protobuf). The protobuf change is one line. The blast radius is what matters.

// shared/protos/demo.proto
message Address {
  string street_address = 1;  // deprecated
  string address_line_1 = 5;
  string address_line_2 = 6;
  string city = 2;
  string state = 3;
  string country = 4;
}
Catalog → consumers of Address.street_address
  • CheckoutService
    Go • orders-team • checkout/main.go:142
    read
  • ShippingService
    Python • orders-team • shipping/quote.py:88
    read
  • EmailService
    Python • growth-team • email/templates/confirmation.py:34
    read
  • frontend
    Go • web-team • frontend/handlers/cart.go:217
    read

Four services across three teams, two languages, four call sites. Each one needs a PR before street_address can be safely removed.

How Freshness Works

Refreshed on every pull request

The catalog is regenerated from source on each PR, not on a schedule and not by hand. Nothing drifts.

1

CI hook on every PR

A GitHub, GitLab, or Bitbucket integration runs the HoundDog analyzer against the diff and the working tree.

2

Deterministic Rust analyzer

Parses gRPC today, with GraphQL and REST coming soon. Source languages: Python, JavaScript, TypeScript, C#, Go, and Java.

3

Catalog and MCP surface update

The catalog refreshes in place. AI agents and humans query the same source of truth through CLI, MCP, or a web viewer.

No embeddings. No probabilistic recall. Same input, same output. The analyzer is deterministic by design, so two runs of the same commit produce identical catalogs.
Where It Runs

Local on your machine. Or centralized across your org.

Two deployment models for two scales. Local for individuals and small repos. Centralized for the codebases no developer can keep checked out on a laptop.

Local · Free

Runs on the developer's machine

The MCP server runs as a local process and indexes whatever code is checked out locally. No infrastructure to stand up. Free.

  • Local MCP server, CLI, and Skills
  • Sees code that is checked out on the developer's machine
  • Best for individual repos, pilots, and evaluation
  • Free to use, deterministic by construction
Centralized · Enterprise

Runs across your entire organization

Cloud or on-premises. Connects directly to GitHub, Bitbucket, or GitLab. Auto-scans every selected repo from your SCM, with no local checkout needed. Developers and AI agents query a centralized catalog that already holds the answer.

  • Direct integrations with GitHub, Bitbucket, and GitLab
  • Auto-scans selected repos, no developer checkout required
  • Centralized context across every repo and cross-service relationship
  • Runs in CI on every pull request, kept fresh org-wide
  • SOC-2, SSO, RBAC, audit logs; on-premises available
Why centralized? On a massive monorepo that no developer can keep checked out completely, or an estate of hundreds (or thousands) of microservices updated at development speed, context has to be gathered centrally. Developers don't check anything out. The MCP server fetches the relevant slice from the central catalog and serves it to the AI coding agent on demand.
See It In Action

Watch a guided walkthrough

See the engine generate the catalog, serve context to a coding agent, and reason about a cross-service change end to end.

Built For Scale

For monorepos and polyglot estates

Designed against the codebases no laptop can hold: tens of millions of lines, hundreds of services, every language pulling its weight. Indexed centrally, queried per-developer.

10M+
lines of code per repo
100s
of interconnected services
6
supported languages
3
API protocols on the roadmap
Who Reads The Catalog

For humans first. Agents too.

The catalog earns its keep before you ever turn on an AI coding agent. Three readers, one source of truth.

Platform & staff engineers

Pull request review, migration planning, deprecation hygiene, on-call investigations. Stop asking "who calls this?" in Slack.

PR reviewMigrationsDeprecationsOn-call

Technical product managers

Org-wide service inventory, ownership clarity, what we ship to which customer segment. Replace the spreadsheet you keep apologizing for.

InventoryOwnershipRoadmapCustomer mapping

AI coding agents

Claude Code, Cursor, Codex, and Copilot read the same catalog through a local MCP server. The catalog is what lets them reason about cross-repo change without grep-bombing.

MCPCLISkills
FAQ

Frequently asked questions

What is in the service catalog?
Every service, every API, every field, and every downstream consumer across your repos. Service owners, language and protocol, call sites, and cross-repo dependency edges are all captured deterministically from the code itself.
How is the catalog kept fresh?
A CI hook runs the HoundDog static analyzer on every pull request. The catalog updates the moment code lands. There is no manual edit step, no spreadsheet to maintain, and no nightly batch that drifts behind the codebase.
How is this different from Backstage?
Backstage is a portal where teams register services and document them by hand. HoundDog generates the catalog from the code itself, so the inventory and dependency map are accurate by construction rather than by discipline.
Does my code leave my machine?
No. Analysis runs locally or inside your CI environment. Source code never leaves your infrastructure.
Which API protocols are supported?
gRPC is supported today, with GraphQL and REST coming soon.

Build the catalog your codebase already describes

Early access is rolling out now. Bring a real repo. We will help you generate the first catalog the same day.