---
title: "Introduction"
description: "GitHub tools gives an AI agent 97 typed GitHub operations, scoped by task, with a human approval in front of every write."
canonical_url: "https://github-tools.com/start/introduction"
---
# Introduction

> GitHub tools gives an AI agent 97 typed GitHub operations, scoped by task, with a human approval in front of every write.

GitHub tools (`@github-tools/sdk`) is a TypeScript SDK that turns GitHub's API into 97 tools an AI agent can call: read a pull request, label an issue, rerun a workflow, open a release. Each tool has a typed input the model can fill, returns only the fields the model needs, and asks a person before it changes anything.

```ts [review.ts]
import { createGithubTools } from '@github-tools/sdk'
import { generateText, stepCountIs } from 'ai'

const { text } = await generateText({
  model: 'anthropic/claude-opus-5.5',
  tools: createGithubTools({ preset: 'code-review' }),
  stopWhen: stepCountIs(10),
  prompt: 'Summarize the open pull requests on vercel/ai and flag the risky ones.',
})
```

The `code-review` preset hands the model the 28 tools that review needs instead of all 97. If the model decides to post a review, the call stops and waits for your approval.

## What's in it

<table>
<thead>
  <tr>
    <th>
      Part
    </th>
    
    <th>
      What it does
    </th>
  </tr>
</thead>

<tbody>
  <tr>
    <td>
      <a href="https://github-tools.com/tools">
        Tools
      </a>
    </td>
    
    <td>
      97 GitHub operations as AI SDK tools, with shaped output and paging
    </td>
  </tr>
  
  <tr>
    <td>
      <a href="https://github-tools.com/presets">
        Presets
      </a>
    </td>
    
    <td>
      Named tool sets for one job, such as <code>
        code-review
      </code>
      
       or <code>
        ci-ops
      </code>
    </td>
  </tr>
  
  <tr>
    <td>
      <a href="https://github-tools.com/approval">
        Approval
      </a>
    </td>
    
    <td>
      Every write waits for a person, unless you say otherwise or let a model decide
    </td>
  </tr>
  
  <tr>
    <td>
      <a href="https://github-tools.com/auth">
        Auth
      </a>
    </td>
    
    <td>
      A token from the environment, a GitHub App, or Vercel Connect
    </td>
  </tr>
  
  <tr>
    <td>
      <a href="https://github-tools.com/context">
        Context
      </a>
    </td>
    
    <td>
      A default repository and pull request, so the model stops asking for them
    </td>
  </tr>
  
  <tr>
    <td>
      <a href="https://github-tools.com/commits">
        Commits
      </a>
    </td>
    
    <td>
      Who the commits are from, and who co-authored them
    </td>
  </tr>
  
  <tr>
    <td>
      <a href="https://github-tools.com/errors">
        Errors
      </a>
    </td>
    
    <td>
      Error codes the model can read and act on
    </td>
  </tr>
</tbody>
</table>

## Where it runs

The tools work in any [AI SDK](https://github-tools.com/integrations/ai-sdk) call. For a whole agent, mount the [eve extension](https://github-tools.com/integrations/eve) in one file. [TanStack AI](https://github-tools.com/integrations/tanstack-ai), [Vercel Workflow](https://github-tools.com/integrations/workflow) and [Chat SDK](https://github-tools.com/integrations/chat-sdk) each have their own entry point. [Integrations](https://github-tools.com/integrations) compares them.

## What it is not

GitHub tools doesn't run a server or hold state. It calls the GitHub API with the token you give it, from your own process. The [GitHub MCP server](https://github.com/github/github-mcp-server) gives a client the whole API over MCP; GitHub tools gives your code a typed subset, with approval decided in your code.

## Next

[Install the SDK](https://github-tools.com/start/installation), then make your [first call](https://github-tools.com/start/quick-start).


## Sitemap

See the full [sitemap](https://github-tools.com/sitemap.md) for all pages.
