A tool is one action an agent can call: one MCP tool, one CLI command or one API endpoint. A product with three actions needs three tool files.
Note. Its capability must be in tags.yml. If none fits, add one there in the same pull request.
How to create
1. Pick the capability
Each tool has one
capability, which puts it next to other vendors that do the same job. Pick one fromtags.yml, the file that lists every tag. If none fits, add a new entry with a label and a few synonyms in the same pull request.2. Create one file per function
Name the file after the action it performs. Apollo can enrich a person, search for people and enrich a company, so that is three files, not one product page. The file path is the tool’s key and its URL.
companies/apollo/tools/ enrich-person.md search-people.md enrich-company.md3. Write the header
A tool file is only a YAML header between two
---lines. Unknown fields are rejected, so a typo fails the check and names the file. Startnamewith a verb, like “Enrich a person”. Keepsummaryto one sentence about what the call returns or changes. If there is something to know before calling, such as an ID to fetch first, a result to wait for, or a cost, add it tonotesin one line. Every workflow that uses the tool shows it.companies/apollo/tools/enrich-person.md --- name: Enrich a person summary: Returns one person's title, employer, employment history and work email, matched from an email, a LinkedIn URL, or a name plus company. notes: A match costs 1 credit, plus 8 for a mobile phone; no match costs nothing. Personal emails and phone numbers are off unless you set `reveal_personal_emails` or `reveal_phone_number`, and phone numbers arrive later at a `webhook_url`. capability: enrich-contacts docs: https://docs.apollo.io/reference/people-enrichment mcp: apollo_people_match cli: apollo people enrich api: POST /people/match updated: 2026-09-26 ---4. Name the call on each way in
For each way in that your
company.mddeclares, name the exact call: the MCP tool name undermcp, the CLI command (starting with the program name) undercli, orMETHOD /pathunderapi. Write it exactly as the vendor’s docs do, and pointdocsat that page. A published tool needs at least one call and adocslink. Until then, setstatus: draft. A draft gets no page and no file.companies/stripe/company.md --- name: Stripe domain: stripe.com category: payments tagline: Payments, billing and subscriptions for internet businesses. docs: https://docs.stripe.com github: https://github.com/stripe logo: https://cdn.growth.engineer/icons/companies/stripe-5ba232e3.jpg mcp: url: https://mcp.stripe.com auth: oauth docs: https://docs.stripe.com/mcp cli: install: npm install -g @stripe/cli binary: stripe auth: oauth docs: https://docs.stripe.com/stripe-cli api: url: https://api.stripe.com auth: api_key env: STRIPE_API_KEY keyUrl: https://dashboard.stripe.com/apikeys docs: https://docs.stripe.com/api updated: 2026-09-27 ---5. Date it
Set
updatedto the day you last checked the facts, asYYYY-MM-DD. A workflow takes the newest date of its tools, so this also updates every workflow that uses the tool.6. Check it locally
Run one command to check everything. It reads every file, checks every link and builds the pages, then lists every problem at once with the file (and line) that caused it. The same check runs again on your pull request.
Terminal pnpm install pnpm content:check pnpm dev # then open /tools/apollo/enrich-person7. Open a pull request
Send one company, tool or workflow per pull request. Say what you added and how you checked the facts. Reviewers check the facts, and the build handles formatting.