# Tools

> Write a tool in TypeScript or Python, call an HTTP API without code, give a tool a secret or per-project values, mark it read-only, and use an MCP server's tools.

These guides write tools, give them secrets and per-project values, and use an HTTP API or an MCP server's tools without code.

A tool is a function with a typed input and a typed output. Agents call tools, and so do flow steps. Kindgi checks the input before your code runs and the output after it returns, so neither side gets malformed data.

- [Write a tool](https://docs.kindgi.com/v0.1.10/guides/tools/write-a-tool.md): a function in TypeScript or Python, tried from a flow, tested, and wired onto an agent.
- [Call an HTTP API without code](https://docs.kindgi.com/v0.1.10/guides/tools/http-tools.md): a tool that is one HTTP request, made by Kindgi.
- [Give a tool a secret](https://docs.kindgi.com/v0.1.10/guides/tools/give-a-tool-a-secret.md): declare the secret, read it from the call's context, keep it out of your code.
- [Give a tool per-project values](https://docs.kindgi.com/v0.1.10/guides/tools/give-a-tool-env-values.md): env values set for a tenant, an org or a project, read from the call's context.
- [Mark a tool read-only](https://docs.kindgi.com/v0.1.10/guides/tools/read-only-tools.md): what `mutating: false` changes for dry runs and approval gates.
- [Use an MCP server's tools](https://docs.kindgi.com/v0.1.10/guides/tools/mcp-servers.md): register an MCP server, and its tools become tools your agents and flows call.

The examples use the pack from the quickstarts, `my-pack`, with `kindgi dev` running: see the [TypeScript](https://docs.kindgi.com/v0.1.10/start/quickstart-typescript.md) and [Python](https://docs.kindgi.com/v0.1.10/start/quickstart-python.md) quickstarts.
