Model Context Protocol server for Pidgeon. A protocol adapter over the API, and nothing more.
Inferred from the transports this listing declares (stdio, streamable-http). A client not listed here hasn’t been ruled out — it just isn’t something Forge can confirm.
PIDGEON_API_KEYAPI keyrequiredYour Pidgeon API key (pgn_live_…). Make one under Developers → API keys, or let an agent sign itself up: https://pidgeon.ai/skill.md
Declared by the author in the official MCP registry. Forge does not store, broker, or ever see these values — the config below is scaffolded with placeholders you fill in locally.
Verification confirms publisher identity (repo ownership), not code safety. The security scan covers known CVEs and suspicious install scripts.
Read out of the source npm actually ships, at scan time. The package was never executed. Tools registered dynamically at runtime, or hidden inside bundled or minified code, can be missed — so this is a floor on the tool surface, not a complete census of it.
list_addressesThe addresses this credential can reach. Use `pod_id` to list one pod’s — one of your own customers — or `tenant_id` for your own opaque grouping.The addresses this credential can reach. Use `pod_id` to list one pod’s — one of your own customers — or `tenant_id` for your own opaque grouping.
No input schema was published for this tool.
create_addressNo description publishedThis tool published no description. Forge does not invent one.
get_addressOne address, by id. Answers its type, its capabilities, its send policy and its end date, which is how to check what an address is allowed to do before using it.One address, by id. Answers its type, its capabilities, its send policy and its end date, which is how to check what an address is allowed to do before using it.
No input schema was published for this tool.
list_threadsConversations in one address, newest first. Filter by `status` for the queue an agent should be working, by `owner_type` for what kind of thing is answering, or by `assignee_id` for what one person has taken — `unassigned` is the queue nobody has.Conversations in one address, newest first. Filter by `status` for the queue an agent should be working, by `owner_type` for what kind of thing is answering, or by `assignee_id` for what one person has taken — `unassigned` is the queue nobody has.
No input schema was published for this tool.
get_threadOne conversation, by id. Every webhook payload carries a `thread_id`, so this is how a handler turns an event into the conversation it is about.One conversation, by id. Every webhook payload carries a `thread_id`, so this is how a handler turns an event into the conversation it is about.
No input schema was published for this tool.
list_messagesThe messages of one conversation, oldest first — the text to read before replying. Bodies are here; attachments are metadata only.The messages of one conversation, oldest first — the text to read before replying. Bodies are here; attachments are metadata only.
No input schema was published for this tool.
search_messagesFull-text search across every address this credential can reach, ranked by relevance. Name an `identity_id` to search exactly one. Every result carries the `identity_id` it was found in, because a hit you cannot attribute to an address is a hit you cannot open.Full-text search across every address this credential can reach, ranked by relevance. Name an `identity_id` to search exactly one. Every result carries the `identity_id` it was found in, because a hit you cannot attribute to an address is a hit you cannot open.
No input schema was published for this tool.
send_messageinjection riskSend from an address this credential may send as. Refused if the address’s send policy does not permit the recipient, or if the recipient previously bounced or reported mail as spam.Send from an address this credential may send as. Refused if the address’s send policy does not permit the recipient, or if the recipient previously bounced or reported mail as spam.
Send from an address this credential may send as. Refused if the address’s send policy does not …No input schema was published for this tool.
get_messageNo description publishedThis tool published no description. Forge does not invent one.
await_messageNo description publishedThis tool published no description. Forge does not invent one.
reply_to_messageThe recipients, the subject and the thread are read off the message being answered, so you bring the words and nothing else. Use `to` only to change who it goes to.The recipients, the subject and the thread are read off the message being answered, so you bring the words and nothing else. Use `to` only to change who it goes to.
No input schema was published for this tool.
update_threadWho owns a conversation and where it has got to. `owner_type: "human"` hands it to a person — it appears in the web inbox and `thread.updated` tells whatever was driving it that it no longer is; `"agent"` takes it back. `status` is the queue it sits in, and `assignee_id` names which person has it.Who owns a conversation and where it has got to. `owner_type: "human"` hands it to a person — it appears in the web inbox and `thread.updated` tells whatever was driving it that it no longer is; `"agent"` takes it back. `status` is the queue it sits in, and `assignee_id` names which person has it.
No input schema was published for this tool.
update_messageNo description publishedThis tool published no description. Forge does not invent one.
list_send_rulesThe allow and block list of one address, and the send policy it hangs off. Read this when a send was refused.The allow and block list of one address, and the send policy it hangs off. Read this when a send was refused.
No input schema was published for this tool.
list_receive_rulesThe rules that decide what reaches one address — reject, spam, trash, archive or inbox, per sender or per domain. Read this when mail you expected did not arrive.The rules that decide what reaches one address — reject, spam, trash, archive or inbox, per sender or per domain. Read this when mail you expected did not arrive.
No input schema was published for this tool.
list_foldersEvery folder of one address with its counts. `total` and `unread` are null where we do not count that folder — null is "we do not say", not zero.Every folder of one address with its counts. `total` and `unread` are null where we do not count that folder — null is "we do not say", not zero.
No input schema was published for this tool.
list_folderOne folder of one address, newest first, a conversation per row — where `list_threads` says which conversations exist, this says where they are filed and what they look like in a list. The response carries a `sync_cursor`: hand it to `list_changes` to be told what moved instead of reading the folde…One folder of one address, newest first, a conversation per row — where `list_threads` says which conversations exist, this says where they are filed and what they look like in a list. The response carries a `sync_cursor`: hand it to `list_changes` to be told what moved instead of reading the folde…
No input schema was published for this tool.
list_changesEverything that moved in one mailbox since a `sync_cursor`, arrivals included, so a long-running agent does not re-read a folder to find one new message. `since` is the `sync_cursor` from `list_folder`, never a page cursor. A cursor older than thirty days is refused with `resync`: list the folders…Everything that moved in one mailbox since a `sync_cursor`, arrivals included, so a long-running agent does not re-read a folder to find one new message. `since` is the `sync_cursor` from `list_folder`, never a page cursor. A cursor older than thirty days is refused with `resync`: list the folders…
No input schema was published for this tool.
list_eventsEvery event across every mailbox this credential reaches — mail received, sent, delivered, bounced, filed. Workspace-wide unless you name an `identity_id`. Pass `after` with a timestamp to read forward from a moment; with neither `after` nor `cursor` it returns the newest first.Every event across every mailbox this credential reaches — mail received, sent, delivered, bounced, filed. Workspace-wide unless you name an `identity_id`. Pass `after` with a timestamp to read forward from a moment; with neither `after` nor `cursor` it returns the newest first.
No input schema was published for this tool.
list_labelsLabels belong to an address, not to the workspace, so the same name on three addresses is three labels with three ids. Read this before applying one.Labels belong to an address, not to the workspace, so the same name on three addresses is three labels with three ids. Read this before applying one.
No input schema was published for this tool.
create_labelA label on one address. `colour` is one of eight names — slate, red, amber, green, teal, blue, violet, pink — and defaults to slate; it is not a hex value.A label on one address. `colour` is one of eight names — slate, red, amber, green, teal, blue, violet, pink — and defaults to slate; it is not a hex value.
No input schema was published for this tool.
apply_labelThe label has to belong to the same address the conversation is in — `list_labels` for that address gives you the right id. Applying is how an automation records what it decided, since it cannot mark anything read.The label has to belong to the same address the conversation is in — `list_labels` for that address gives you the right id. Applying is how an automation records what it decided, since it cannot mark anything read.
No input schema was published for this tool.
remove_labelprivilegedRemoves one label from one conversation. The label itself is untouched.Removes one label from one conversation. The label itself is untouched.
No input schema was published for this tool.
list_podsA pod is a container for one of your own customers: it holds addresses and domains, and **mail sent from it lands on its own sending reputation**, so one customer cannot damage another’s delivery. Every account has one to start with, marked `is_default` — that is where an address goes when you name…A pod is a container for one of your own customers: it holds addresses and domains, and **mail sent from it lands on its own sending reputation**, so one customer cannot damage another’s delivery. Every account has one to start with, marked `is_default` — that is where an address goes when you name…
No input schema was published for this tool.
create_podA container for one of your customers, with its own sending reputation. Give it a `name` a person would recognise and, if your own system has an id for this customer, `client_id` — carried and returned, never parsed. Then pass the new pod’s id as `pod_id` to `create_address`. There is no delete: a…A container for one of your customers, with its own sending reputation. Give it a `name` a person would recognise and, if your own system has an id for this customer, `client_id` — carried and returned, never parsed. Then pass the new pod’s id as `pod_id` to `create_address`. There is no delete: a…
No input schema was published for this tool.
get_metricsNo description publishedThis tool published no description. Forge does not invent one.
21 of 26 tools published a description.
Tool names and descriptions are written by the publisher and shown verbatim as inert text. They are the strings an MCP client passes to a model, so Forge scans them for prompt-injection patterns — any finding appears with the security scan above. “Privileged” is a keyword match on the tool name, not an audit of what the tool does: a benign-sounding name can still do anything.
Model Context Protocol server for Pidgeon. A protocol adapter over the API, and nothing more.
Linked names open Forge’s index of every entry observed exposing that tool. Browse all indexed tools.
The crawl stopped at the depth-4 limit. Anything below that level was never resolved.
The crawl stopped at the 60-package limit. The rest of the tree was never resolved.
36 more resolved packages are not drawn here (display cap: 24). Every dependency carrying an advisory is drawn regardless of the cap. Full inventory (CycloneDX SBOM)
55 declared dependencies never landed in the tree. They are missing from Forge's resolution, not from the package.
+43 more not listed. The counts by reason above cover all of them.
Not followed: peerDependencies. This tree covers runtime dependencies only, so anything those pull in was never resolved.