AI MCP
Four sources, one query, one ranked list.
One query goes to the Crunchbase, CB Insights, PitchBook and open web connectors at once. Results merge by company with every source kept, and each profile is ranked by the confidence of its sources. The public copy ships stub connectors, so it runs without a data licence.

The problem
Researching a startup means checking Crunchbase, CB Insights, PitchBook and the open web one at a time, then reconciling four answers by hand. Each source has its own API, its own shape and its own idea of how sure it is.
How I built it
Every source sits behind one connector interface, so adding a fifth is one class. A FastAPI endpoint takes the query and the orchestrator runs every connector at once with asyncio.gather, so the slowest source sets the wait rather than the sum of all four. Results merge by company name with every source kept beside its own confidence, and a profile's score is the sum of its sources' confidence divided by the number of connectors, capped at 1. The list comes back ranked by it.
The hard parts
- One interface over four sources with different APIs and response shapes, typed end to end with Pydantic
- Running every source concurrently so one slow call does not queue the others
- Merging across sources without dropping provenance: every value keeps the source it came from
- Entity resolution is the honest next step: 'Stripe Inc' and 'Stripe, Inc.' still arrive as two profiles

