Search and read GitHub issues

flurryport:github-search-issuesdeliveryv1first-partysha256:d2affef0345aNeeds: read/write agent token

Search GitHub issues and read whole threads back, without your AI ever holding the PAT.

Give your AI read access to GitHub issues through a pipe whose fine-grained PAT it never touches. Send a GitHub search query and get the matching issues back with their numbers, ids, titles, states, labels and assignees already on them. Send a list of issue ids instead and get those issues in full, with bodies, authors and recent comments. One pipe covers both because they are the same call to the same place with the same credential. Choose your scope. The github family is a ladder. File only: github-create-issue on its own, which runs on the free Deckhand plan and fits a developer logging bugs without leaving the code. Read only: github-search-issues on its own, which also runs on the free Deckhand plan and needs only a PAT scoped Issues (Read), and fits a developer checking their own assignments or a lead reading the queue. Read and file: both of those, which needs two pipe slots (Bosun). Full management: add github-update-issues for three pipe slots (First Mate) and a PAT scoped Issues (Read and write), for someone grooming a backlog. Climbing the ladder stacks pipes rather than swapping them, because each member does something the others cannot, so budget a slot per member you install.

The credential never enters the model context: it lives in the FlurryPORT secret store, deliveries are signed server-side, and every send returns a receipt your agent can quote.

What this is

Your AI reads GitHub issues through a pipe whose fine-grained PAT it never touches. It sends a search query, or a list of issue ids, and FlurryPORT adds the credential server-side and returns GitHub's answer as a receipt.
One pipe does both jobs. Search gives you the shape of the queue: numbers, ids, titles, states, labels, assignees, all on the result already. Reading by id gives you the substance: bodies, authors, recent comments. They are the same call to the same endpoint with the same credential, so folding them costs you nothing and saves a pipe slot.

Setup in two steps

  1. GitHub side. Settings, Developer settings, Fine-grained tokens: generate a token for the repositories you want readable, with Issues (Read) and Metadata (Read). Nothing broader; reading needs nothing broader.
  2. FlurryPORT side. Your AI requests secret setup and FlurryPORT emails you a secure page. Paste the token there and the pipe goes live.

There is nothing to configure at install. Repository scope lives in the search query, so one pipe serves every repository your token can see.

How to drive it

Search first, then read what interests you.
q: "repo:owner/name is:issue is:open label:bug"

Every result carries an id. Feed those ids back to read the issues in full:
ids: ["I_kwDOAn8RLM8AAAABMW1TZA"]

Issue numbers and node ids are different things. People quote numbers; this pipe reads by node id. Search returns both, which is why searching first is the fast path rather than a detour.

What to expect

Results land on the replay execution, not on the capture. Read them with get_replay_execution and they will normally be there within a second or two, so check once and retry briefly rather than sleeping.
On plans without full response bodies the stored response is capped at 4096 bytes. The default page size of 10 is chosen to fit inside that cap against real repositories with long titles. If you raise it, check ResponseBodyTruncated before parsing, because a truncated JSON body will not parse at all.

Credential custody

The PAT is stored encrypted, added at delivery, and scrubbed from stored responses. Scoping it to read means even a fully compromised pipe could not change anything in your repositories.
Pairs with create a GitHub issue for filing and update GitHub issues for grooming. The three together give an AI the same working relationship with GitHub that the azure-devops family gives it with Azure Boards.

Install with your agent

npx flurryport mcp

Point your agent at the FlurryPORT MCP server (npx flurryport mcp) and ask it for the flurryport:github-search-issues recipe. Works from AI clients that can run a local process: desktop apps and terminal agents. Web-only chat clients cannot reach a local MCP server; open a desktop client instead.

Tools your agent gains

flry_github_search_issues
Search GitHub issues, or read specific issues in full. Input: q (a GitHub search query) with optional first, OR ids (issue node ids) to read those issues with bodies and recent comments. Results arrive on the replay execution the fire created, not inline: read them with get_replay_execution. Carry the id field from a search result into ids to read an issue in full.

Setup walkthrough

  1. GITHUB_PAT: GitHub Settings, Developer settings, Fine-grained tokens: generate one for the repositories you want readable. This recipe on its own needs only Issues (Read) plus Metadata (Read); the same token needs Issues (Read and write) if it also serves github-create-issue or github-update-issues. Paste it in the FlurryPORT secret page. Fine-grained tokens work with the GraphQL API this pipe calls, proven live 2026-08-12.

Intent schema

{
  "type": "object",
  "properties": {
    "q": {
      "type": "string",
      "description": "A GitHub issue search query, the same syntax the search box on github.com takes. Scope by repository in the query, not at install: repo:owner/name is:issue is:open assignee:@me returns the open issues assigned to whoever owns the PAT."
    },
    "first": {
      "type": "integer",
      "description": "How many issues to return. Defaults to 10, which is chosen to stay inside the 4096-byte stored response on plans without full response bodies. Raise it only when your plan stores full bodies."
    },
    "ids": {
      "type": "array",
      "items": {
        "type": "string"
      },
      "description": "Issue node ids to read in full, as returned in the id field of a search. These are GraphQL node ids like I_kwDOAn8RLM8AAAABMW1TZA, NOT the issue numbers people quote."
    }
  }
}

Transformation

{ "body": $exists($body.ids) ? { "query": "query($ids:[ID!]!){ nodes(ids:$ids){ ... on Issue { number id title state url createdAt body author{ login } labels(first:20){ nodes{ name } } assignees(first:10){ nodes{ login } } comments(last:10){ totalCount nodes{ author{ login } body createdAt } } } } }", "variables": { "ids": $body.ids } } : { "query": "query($q:String!,$n:Int!){ search(query:$q, type:ISSUE, first:$n){ issueCount nodes{ ... on Issue { number id title state createdAt url labels(first:10){ nodes{ name } } assignees(first:5){ nodes{ login } } } } } }", "variables": { "q": $body.q, "n": $exists($body.first) ? $body.first : 10 } } }

Delivery target

POST https://api.github.com/graphql

Placeholders like $secrets.NAME resolve server-side at delivery, never in the agent.

Gotchas

Where this fits

Related recipes

flurryport:github-create-issuedelivery

Let your AI file GitHub issues with a fine-grained PAT it never touches.

flurryport:azure-devops-managedelivery

Create and update Azure DevOps work items in one batched pipe: priority, state, tags, and sprint included.

flurryport:azure-devops-querydelivery

Query Azure DevOps work items with WIQL and read the matching ids back, without your AI ever holding the PAT.

flurryport:azure-devops-readdelivery

Read fields for a batch of Azure DevOps work items by id: title, state, tags, priority, iteration.

flurryport:azure-devops-workitemdelivery

Let your AI file Azure DevOps work items (bugs, tasks) the model never holds credentials for.

flurryport:jira-create-issuedelivery

Let your AI file Jira Cloud issues with an API token it never touches.