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 and Thrift today, with GraphQL and REST coming soon. Source languages: Python, JavaScript, TypeScript, C#, Go, and Java. See the full list of supported languages and protocols.

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.

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
Discovery vs. Reasoning

Why not just build another AI agent?

AI agents are great at reasoning. They are an expensive and inefficient way to repeatedly rediscover deterministic facts about your codebase.

Without precomputed context, every agent has to search files, follow references, inspect protobuf definitions, and reconstruct dependencies before it can start solving the actual problem. Multiply that across developers, prompts, and repositories, and you repeatedly pay for the same discovery in tokens, latency, and compute.

HoundDog.ai separates discovery from reasoning.

Static analysis discovers. AI reasons. MCP delivers.

The Dataflow Context Engine computes API, field, consumer, and service relationships deterministically, keeps them current as code changes, and makes that evidence available to your existing AI agents through MCP.

Compute the facts once. Keep them fresh. Let every authorized AI agent reason over them.
Fresh On Every Build

Keep AI context fresh with every build

AI coding agents are only as useful as the context they can access. In large codebases, that context changes every time services, APIs, fields, consumers, or dependencies change. HoundDog.ai integrates directly into your CI workflows to continuously regenerate this context from source code.

CodeserviceAPImethodfieldconsumercallsite

Our fast, deterministic analysis engine runs on standard CPU infrastructure with minimal impact on CI latency. Instead of asking AI agents to repeatedly search repositories and reconstruct the same relationships, HoundDog.ai computes those relationships once and refreshes them as your code changes.

The resulting evidence can power your service catalog, API and gRPC and Thrift discovery, microservices documentation, change blast radius analysis, and organization wide context for AI coding agents.

Through MCP, authorized agents such as Claude Code can query this continuously updated context whenever they need it.

Static analysis discovers. AI reasons. MCP delivers.
Use AI where reasoning adds value. Let CI handle the deterministic discovery.
A deterministic context layer for AI agents: source code feeds deterministic Rust static analysis, which produces a continuously updated dataflow graph of services, APIs, callsites, fields and dataflows; the MCP server then delivers structured traces to AI agents for reasoning, with no source code access.
Deterministic discovery runs in CI. The MCP server delivers structured traces, not raw source code. AI agents reason over facts they no longer have to rediscover.
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 and Thrift are supported today, with GraphQL and REST coming soon. See the full list of supported languages and protocols.

Stop asking who calls this

Generate a continuously updated service catalog directly from your code. See every service, API, field, downstream consumer, and dependency across your repositories without spreadsheets, stale documentation, or manual discovery.

Run locally for free, or connect your repositories to give your entire organization one source of truth.