CONNECT APP
Build with GitHub
Developer Tools
- OAuth
MCP
Give your agent GitHub tools
Every GitHub action is exposed as an MCP tool on Pipedream's remote server. Point a client at it with your end user's ID and Connect resolves that user's GitHub account for each tool call — you store no tokens.
// accessToken: mint a short-lived token with the Connect SDK — see the MCP guide
const transport = new StreamableHTTPClientTransport(
new URL("https://remote.mcp.pipedream.net/v3"),
{
requestInit: {
headers: {
Authorization: `Bearer ${accessToken}`,
"x-pd-project-id": "{project_id}",
"x-pd-environment": "production",
"x-pd-external-user-id": "{external_user_id}", // any stable ID for this user in your system
"x-pd-app-slug": "github",
},
},
},
)
const mcp = new Client({ name: "my-agent", version: "1.0.0" })
await mcp.connect(transport)
const { tools } = await mcp.listTools()
// e.g. run Create Issue:
const result = await mcp.callTool({
name: "github-create-issue",
arguments: {
repoFullname: "Repository",
title: "Title",
},
})# access_token: mint a short-lived token with the Connect SDK — see the MCP guide
headers = {
"Authorization": f"Bearer {access_token}",
"x-pd-project-id": "{project_id}",
"x-pd-environment": "production",
"x-pd-external-user-id": "{external_user_id}", # any stable ID for this user in your system
"x-pd-app-slug": "github",
}
async with streamablehttp_client("https://remote.mcp.pipedream.net/v3", headers=headers) as (read, write, _):
async with ClientSession(read, write) as session:
await session.initialize()
tools = await session.list_tools()
# e.g. run Create Issue:
result = await session.call_tool("github-create-issue", {
"repoFullname": "Repository",
"title": "Title",
})API PROXY
Call the GitHub API directly
For an endpoint with no pre-built tool, the Connect proxy forwards your request to the GitHub API with the connected user's credentials attached. You store no tokens and write no refresh logic.
const resp = await pd.proxy.get({
externalUserId: "{external_user_id}", // any stable ID for this user in your system
accountId: "apn_xxxxxxx",
url: "https://api.github.com/user",
})
// Any allowed GitHub endpoint works here. Pipedream attaches the
// connected account's credentials to the outgoing request.# The path segment is the target URL, URL-safe base64 encoded:
# https://api.github.com/user
curl "https://api.pipedream.com/v1/connect/{project_id}/proxy/aHR0cHM6Ly9hcGkuZ2l0aHViLmNvbS91c2Vy?external_user_id={external_user_id}&account_id=apn_xxxxxxx" \
-H "Authorization: Bearer {access_token}" \
-H "x-pd-environment: production"SDK
Run GitHub actions from your backend
Connect a user's GitHub account once, then run Create Issue on their behalf from your own code — TypeScript, Python, or plain HTTP.
import { PipedreamClient } from "@pipedream/sdk"
const pd = new PipedreamClient({
projectId: process.env.PIPEDREAM_PROJECT_ID!,
clientId: process.env.PIPEDREAM_CLIENT_ID!,
clientSecret: process.env.PIPEDREAM_CLIENT_SECRET!,
projectEnvironment: "production",
})
const result = await pd.actions.run({
id: "github-create-issue",
externalUserId: "{external_user_id}", // any stable ID for this user in your system
configuredProps: {
github: { authProvisionId: "apn_xxxxxxx" },
repoFullname: "Repository",
title: "Title",
},
})from pipedream import Pipedream
pd = Pipedream(
client_id="{oauth_client_id}",
client_secret="{oauth_client_secret}",
project_id="{project_id}",
project_environment="production",
)
result = pd.actions.run(
id="github-create-issue",
external_user_id="{external_user_id}", # any stable ID for this user in your system
configured_props={
"github": {"authProvisionId": "apn_xxxxxxx"},
"repoFullname": "Repository",
"title": "Title",
},
)curl -X POST https://api.pipedream.com/v1/connect/{project_id}/actions/run \
-H "Content-Type: application/json" \
-H "X-PD-Environment: production" \
-H "Authorization: Bearer {access_token}" \
-d '{
"external_user_id": "{external_user_id}",
"id": "github-create-issue",
"configured_props": {
"github": { "authProvisionId": "apn_xxxxxxx" },
"repoFullname": "Repository",
"title": "Title"
}
}'TOOLS
GitHub actions
On-demand operations your product or agent can configure and run on behalf of a connected user.
-
Create Issue
actionCreate a new issue in a repository, optionally with labels, assignees, and a milestone. Provide the repository as anowner/repostring. Labels and assignees are passed by name/login (e.g.bug,octocat) — setting them requires push access to the repo. To comment on an existing issue instead, use Create Issue Comment; to change an existing issue, use Update Issue. See the documentationWritev0.4.3 -
Search Issues and Pull Requests
actionSearch issues and pull requests across GitHub using the issues-search query DSL. This is the escape hatch for finding items by keyword, state, label, author, or assignee when you don't already know the issue/PR number. Build thequeryfrom space-separated qualifiers:repo:owner/nameto scope to one repo (a barerepo:namewith no owner is auto-resolved to your own account),is:issue/is:pr,is:open/is:closed,label:bug,author:octocat,assignee:octocat,in:title/in:body, and free-text keywords. Example:repo:PipedreamHQ/pipedream is:issue is:open label:bug raptor. Returns matching items (each withnumber,title,state,labels,html_url); feed a result'snumberinto Get Issue, Get Pull Request, or Create Issue Comment. See the query syntaxRead-onlyv0.3.3 -
Create Branch
actionCreate a new branch in a repository, pointing at the tip of a source branch. Provide the repository as anowner/repostring, the newbranchName, and optionally thesourceBranchto branch from (defaults to the repository's default branch). Use Create or Update File Contents to add commits to the new branch, then Create Pull Request to open a PR. See the documentationWritev1.0.2 -
Create Gist
actionAllows you to add a new gist with one or more files. See the documentationWritev0.0.18 -
Create Issue Comment
actionAdd a comment to an existing issue or pull request (GitHub treats PRs as issues for comments, so the samenumberworks for both). Provide the repository as anowner/repostring, the issue/PR number, and the comment body. If you only know the issue/PR by title, call Search Issues and Pull Requests first to resolve its number. See the documentationWritev0.1.3 -
Create or Update File Contents
actionCreate a new file or overwrite an existing one in a repository with a single commit. Provide the repository as anowner/repostring, the filepath, the raw textcontent(passed as-is — do not base64-encode it yourself), and a commit message. If the file already exists on the target branch it is overwritten; the required blob SHA is resolved for you automatically. Defaults to the repository's default branch unlessbranchis set. See the documentationWritev1.0.3 -
Create Pull Request
actionOpen a pull request proposing to merge one branch into another within a repository. Provide the repository as anowner/repostring, theheadbranch (the source containing your changes) and thebasebranch (the target, e.g.main), plus a title. The head and base branches must already exist and differ. For a cross-fork PR, setheadtousername:branch. Use Create or Update File Contents to push changes to a branch before opening the PR. See the documentationWritev1.0.3 -
Create Pull Request Review
actionSubmit a review on a pull request: approve it, request changes, or leave a general comment. SeteventtoAPPROVE,REQUEST_CHANGES, orCOMMENT— abodyis required forREQUEST_CHANGESandCOMMENT. Optionally attach inlinecommentstied to specific lines of the diff. GitHub forbids approving your own pull request, so useCOMMENTto leave feedback on PRs you authored. Provide the repository as anowner/repostring and the PR number. Use Get Pull Request Files to find the file paths and lines to comment on, and Search Issues and Pull Requests withis:prto resolve the PR number from a title. See the documentationWritev0.0.3 -
Create Repository
actionCreates a new repository for the authenticated user. See the documentationWritev0.0.23 -
Create Workflow Dispatch
actionCreates a new workflow dispatch event. See the documentationWritev0.0.10 -
Disable Workflow
actionDisables a workflow and sets the state of the workflow to disabled_manually. See the documentationWritev0.0.10 -
Enable Workflow
actionEnables a workflow and sets the state of the workflow to active. See the documentationWritev0.0.10 -
Get Commit
actionGet the details of a single commit, including the list of files it changed (with per-file additions/deletions and patches) and aggregate stats. Provide the repository as anowner/repostring and aref— a commit SHA, branch name, or tag. Use List Commits to find a commit SHA, or pass a branch name likemainto get its latest commit. See the documentationRead-onlyv1.0.2 -
Get Current User
actionGather a full snapshot of the authenticated GitHub actor, combining/user,/user/orgs, and/user/teams. Returns profile metadata (login, name, email, company, plan, creation timestamps) and trimmed lists of organizations and teams for quick role awareness. Helpful when you need to validate which user is calling the API, adapt behavior based on their org/team memberships, or provide LLMs with grounding before repository operations. See the documentation.Read-onlyv0.0.7 -
Get Issue
actionGet the full details of a single issue: title, body, state, labels, assignees, milestone, comment count, and timestamps. Provide the repository as anowner/repostring and the issue number. If you only know the issue by title or topic, call Search Issues and Pull Requests first to resolve its number. See the documentationRead-onlyv0.1.3 -
Get Issue Assignees
actionGet assignees for an issue in a GitHub repo. See the documentationRead-onlyv0.0.29 -
Get Pull Request
actionGet the full details of a single pull request along with its reviews and a CI/merge readiness summary. Returns PR metadata (title, body, state, head/base branches, draft flag, timestamps), themergeable/mergeable_stateflags, achecksSummaryrollup of CI status for the head commit (combined commit status + check runs, summarized to an overall state and pass/fail counts), the list of reviews, and a deduplicated list of reviewers with their review states (e.g.APPROVED,CHANGES_REQUESTED). Use this to answer "can I merge this?" and "is CI green?" before calling Merge Pull Request. Provide the repository as anowner/repostring and the PR number. If you only know the PR by title, call Search Issues and Pull Requests withis:prfirst to resolve its number. See the documentationRead-onlyv0.1.2 -
Get Pull Request Files
actionList the files changed in a pull request (the PR diff at the file level). Returns each file'sfilename,status(added/modified/removed/renamed), additions/deletions/changes counts, and the unifiedpatchwhen available — use this to review what a PR changes before approving or merging it. Provide the repository as anowner/repostring and the PR number. If you only know the PR by title, call Get Pull Request or Search Issues and Pull Requests withis:prfirst to resolve its number. See the documentationRead-onlyv0.0.3 -
Get Repository Content
actionRead a file's contents or list a directory in a repository. For a file, the base64 payload is decoded for you and returned as plain text in thecontentfield. For a directory, returns the list of entries (name, path, type). Provide the repository as anowner/repostring and thepathto the file or directory (omitpathfor the repo root). Use Get Repository first if you need to know the default branch. See the documentationRead-onlyv1.0.3 -
Get Repository Info
actionGet metadata for a single repository: description, default branch, visibility, topics, star/fork/open-issue counts, your permission level, and timestamps. Use this to discover a repo's default branch before reading files with Get Repository Content or listing history with List Commits. Provide the repository as anowner/repostring (e.g.PipedreamHQ/pipedream). See the documentationRead-onlyv0.1.3 -
Get Reviewers
actionGet reviewers for a PR (see documentation) or Commit SHA (see documentation).Read-onlyv0.1.10 -
Get Workflow Run
actionGet the details of a single GitHub Actions workflow run, including its per-job conclusions and a link to the run's logs. Returns the run'sstatus/conclusionand timestamps plus ajobsarray (each job's name, status, conclusion, andlogsUrl) so you can see exactly which job failed. Provide the repository as anowner/repostring and the run ID. Use List Workflow Runs to find a run ID, then Run Workflow to re-run the failed jobs. See the documentationRead-onlyv1.0.2 -
List Branches
actionList the branches in a repository. Provide the repository as anowner/repostring. Optionally filter to only protected (or only unprotected) branches. If you need to discover repository names first, use List Repositories. See the documentationRead-onlyv1.0.2 -
List Commits
actionList commits in a repository, most recent first. Optionally scope to a branch or starting SHA, a file path, an author, or a date range. Provide the repository as anowner/repostring. Use Get Repository to find the default branch name if needed. See the documentationRead-onlyv0.1.3 -
List Gist Id Options
actionRetrieves available options for the Gist Id field.Read-onlyv0.0.4 -
List Gists for a User
actionLists public gists for the specified user. See the documentationRead-onlyv0.1.10 -
List Milestones
actionList the milestones in a repository (title, state, due date, and open/closed issue counts). Use this to discover a milestone's title or number before filtering or updating issues. Provide the repository as anowner/repostring; if you pass only a repo name, the authenticated user is assumed as the owner. Discover repository names with List Repositories. See the documentationRead-onlyv0.0.2 -
List Organization Options
actionRetrieves available options for the Organization field.Read-onlyv0.0.4 -
List Organization Repositories
actionList repositories for an organization. See the documentationRead-onlyv0.0.4 -
List Organizations
actionList all organizations in the authenticated user's account. See the documentationRead-onlyv0.0.4 -
List Project Items
actionList the items in a Project (V2). Each item has anid, atype, and its title underfieldValueByName.text(not a flattitlefield). Use the returned itemidwith Update Project (V2) Item Status to change an item's status. Get the project number from List Projects and its valid statuses from List Project Statuses. Discover organization logins with List Organizations. Returns at most 100 items with no pagination — a project with more than 100 items exposes only the last 100 (the tail of the item connection, in the connection's own order), so earlier items can't be retrieved. See the documentationRead-onlyv0.0.2 -
List Project Statuses
actionList the options of a Project (V2) Status field (e.g.Todo,In Progress,Done), returning each option's name and id. Use this to discover the valid status values for a project before calling Update Project (V2) Item Status. Get the project number from List Projects. Discover organization logins with List Organizations. See the documentationRead-onlyv0.0.2 -
List Projects
actionList the Projects (V2) owned by an organization, or scoped to a specific repository (returns each project's number and title). This is the entry point for the Projects (V2) discovery chain: use the returned project number with List Project Statuses, List Project Items, or Update Project (V2) Item Status. Discover organization logins with List Organizations. Note: user-owned Projects are not supported. Returns{ projects, nextCursor }; whennextCursoris non-null there are more results — pass it back as Cursor to fetch the next page. Do NOT call this with a guessed or assumed Owner: if the user hasn't named the organization/owner, ask them first rather than trying multiple organizations. See the documentationRead-onlyv0.0.3 -
List Releases
actionList releases for a repository See the documentationRead-onlyv0.0.16 -
List Repositories
actionList repositories the authenticated user can access, or — whenorgis provided — the repositories of a specific organization. Use this to discover a repo'sowner/reponame before calling Get Repository, Get Repository Content, or List Commits. To find repos by name, set thenamesubstring filter. See the documentationRead-onlyv1.0.3 -
List Repository Collaborators
actionList the collaborators on a repository (their login, permissions, and profile links). Use this to see who has access to a repo, or to find a valid collaborator login before assigning issues or requesting reviews. Provide the repository as anowner/repostring; if you pass only a repo name, the authenticated user is assumed as the owner. Discover repository names with List Repositories. See the documentationRead-onlyv0.0.2 -
List Repository Labels
actionList the labels defined in a repository (name, color, and description). Use this to discover valid label names before filtering issues or applying labels. Provide the repository as anowner/repostring; if you pass only a repo name, the authenticated user is assumed as the owner. Discover repository names with List Repositories. See the documentationRead-onlyv0.0.2 -
List Team Id Options
actionRetrieves available options for the Team Id field.Read-onlyv0.0.4 -
List Workflow Runs
actionList GitHub Actions workflow runs for a repository, most recent first. Optionally filter bybranchorstatus(e.g.completed,in_progress,failure,success). Returns each run'sid, workflow name,status,conclusion, branch, and timestamps. Use this to triage CI — find a failing run, then pass itsidto Get Workflow Run for job details or to Run Workflow to re-run its failed jobs. Provide the repository as anowner/repostring. See the documentationRead-onlyv1.0.2 -
List Workflows
actionList the GitHub Actions workflows defined in a repository. Returns each workflow'sid,name,path(e.g..github/workflows/ci.yml), andstate. Use this to discover the workflow file name or ID needed by Run Workflow. Provide the repository as anowner/repostring. See the documentationRead-onlyv0.0.3 -
Merge Pull Request
actionMerge an open pull request into its base branch. Choose themergeMethod:merge(a merge commit, the default),squash(combine all commits into one), orrebase. The merge fails if the PR is not mergeable (conflicts, failing required checks, or required reviews missing) — check mergeable state and CI with Get Pull Request first. Provide the repository as anowner/repostring and the PR number. To create the PR first, use Create Pull Request. See the documentationWritev0.0.3 -
Run Workflow
actionTrigger a GitHub Actions workflow run, or re-run the failed jobs of a previous run. To start a new run, provideworkflow(the workflow file name, e.g.ci.yml, its display name, or its numeric ID) and optionallyref(the branch or tag to run on — defaults to the repository's default branch) andinputs(forworkflow_dispatchworkflows). To re-run only the failed jobs of an existing run instead, providererunFailedRunId. The workflow must already have aworkflow_dispatchtrigger to be dispatchable. Use List Workflows to find the workflow file name and List Workflow Runs to find a run ID. Provide the repository as anowner/repostring. See the documentationWritev0.0.3 -
Star Repo
actionStar a repository. See the docs for more info.Writev0.0.10 -
Sync Fork Branch with Upstream
actionSync a forked branch with the upstream branch. See the documentationWritev0.0.5 -
Update Gist
actionAllows you to update a gist's description and to update, delete, or rename gist files. See the documentationWritev0.0.18 -
Update Issue
actionUpdate an existing issue: change its title, body, state (open/closed), labels, assignees, or milestone. Provide the repository as anowner/repostring and the issue number. Settinglabelsreplaces the full label set (it does not append), so include any existing labels you want to keep. Closing an issue is done here by settingstatetoclosed. Use Get Issue first if you need the current values. See the documentationWritev0.3.3 -
Update Project (V2) Item Status
actionUpdate the status of an item in the selected Project (V2). See the documentationWritev0.0.13 -
Update Pull Request
actionUpdate an existing pull request's title, body, state (open/closed), or base branch. Only the fields you provide are changed. Provide the repository as anowner/repostring and the PR number. If you only know the PR by title, call Get Pull Request or Search Issues and Pull Requests withis:prfirst to resolve its number. To merge a PR, use Merge Pull Request; to comment on it, use Create Issue Comment. See the documentationWritev1.0.2
-
New Branch Created
triggerEmit new event when a branch is created.Instantv1.0.16 -
New Card in Column (Classic Projects)
triggerEmit new event when a (classic) project card is created or moved to a specific column. For Projects V2 useNew Issue with Statustrigger. More information hereInstantv1.0.15 -
New Collaborator
triggerEmit new event when a collaborator is addedInstantv1.0.16 -
New Commit
triggerEmit new event when commits are pushed to a branchInstantv1.0.17 -
New Commit Comment
triggerEmit new event when a commit comment is createdInstantv1.0.16 -
New Discussion
triggerEmit new event when a discussion is createdInstantv1.0.16 -
New Fork
triggerEmit new event when a repository is forkedInstantv1.0.16 -
New Gist
triggerEmit new events when new gists are created by the authenticated user. See the documentationv0.2.11 -
New Issue Comment
triggerEmit new event when a new comment is added to an issue or pull requestInstantv0.0.8 -
New Label
triggerEmit new event when a new label is createdInstantv1.0.16 -
New Mention
triggerEmit new event when you are @mentioned in a new commit, comment, issue or pull request. See the documentationv0.2.10 -
New Notification
triggerEmit new event when the authenticated user receives a new notification. See the documentationv0.2.10 -
New or Updated Issue
triggerEmit new events when an issue is created or updatedInstantv1.1.13 -
New or Updated Milestone
triggerEmit new event when a milestone is created or updatedInstantv1.1.13 -
New or Updated Pull Request
triggerEmit new event when a pull request is opened or updatedInstantv1.2.13 -
New Organization
triggerEmit new event when the authenticated user is added to a new organization. See the documentationv0.2.10 -
New release
triggerEmit new event when a new release is createdInstantv1.0.16 -
New Repository
triggerEmit new event when a new repository is created or when the authenticated user receives access. See the documentationv0.2.10 -
New Review Request
triggerEmit new events when you or a team you're a member of are requested to review a pull request across repositories accessible to the connected account. See the documentationv0.2.11 -
New Security Alert
triggerEmit new event for security alert notifications. See the documentationv0.2.10 -
New Star By User
triggerEmit new events when the specified user stars a repository. See the documentationv0.0.15 -
New Stars
triggerEmit new event when a repository is starredInstantv1.0.16 -
New Team
triggerEmit new event when the authenticated user is added to a new team. See the documentationv0.2.10 -
New Webhook Event (Instant)
triggerEmit new event for each selected event typeInstantv1.0.17 -
New Workflow Job Completed (Instant)
triggerEmit new event when a job in a workflow is completed, regardless of whether the job was successful or unsuccessful.Instantv0.0.10 -
New Workflow Run Completed (Instant)
triggerEmit new event when a GitHub Actions workflow run completesInstantv0.0.10 -
Project Item Status Changed
triggerEmit new event when a project item is tagged with a specific status. Currently supports Organization Projects only. More information hereInstantv0.1.14
MULTI-APP
Use GitHub with other popular apps
Most products don't stop at one integration. Pair GitHub with the other apps your users rely on, and ship use cases that span both.
- App slug
- github
- Authentication
- OAuth
- Categories
- Developer Tools
- Actions
- 48
- Triggers
- 27
- API proxy
- Available
OAuth scopes
These are the scopes Pipedream's managed GitHub OAuth client requests when one of your users connects an account. Supply your own OAuth client to request a different set.
- repo
- read:org
- admin:org_hook
- gist
- project
- notifications
- read:user
- write:discussion
- admin:repo_hook