Skip to content

feat(plugins): add pingroom-mcp and pingroom-cli - #539

Open
mahdi-salmanzade wants to merge 2 commits into
xai-org:mainfrom
mahdi-salmanzade:add-pingroom-plugin
Open

feat(plugins): add pingroom-mcp and pingroom-cli#539
mahdi-salmanzade wants to merge 2 commits into
xai-org:mainfrom
mahdi-salmanzade:add-pingroom-plugin

Conversation

@mahdi-salmanzade

@mahdi-salmanzade mahdi-salmanzade commented Sep 3, 2026

Copy link
Copy Markdown

What this PR does

Adds PingRoom — an event platform for reaching a human from an agent session. Two sibling plugins from the same repo: the hosted MCP connector, and a skill for the @pingroom/cli for shells, CI, and hooks.

What each ships (per the regenerated index):

Plugin Components
pingroom-mcp 1 skill (pingroom-mcp, with a generated tool reference) + 1 HTTP MCP server
pingroom-cli 1 skill (pingroom-cli)

No commands, agents, hooks, LSP servers, or executable code in either plugin directory.

Ownership

  • I own this plugin or have the right to distribute it.
  • The source repo is published under our official org (or I've explained why not below).

github.com/pingroom/skills is the PingRoom org's public skills repo, MIT licensed. The fork this PR comes from is a personal account; the plugin source is not.

Checklist

  • Added/updated exactly one entry in .grok-plugin/marketplace.json (valid JSON, kebab-case name). — two entries, see note below
  • Remote source pins a full 40-char lowercase commit sha, and that commit is public + reachable.
  • Regenerated .grok-plugin/plugin-index.json (python3 scripts/generate-plugin-index.py).
  • python3 scripts/validate-catalog.py passes locally.
  • python3 scripts/generate-plugin-index.py --check passes locally.
  • homepage + clear description set; local plugins include README.md + .grok-plugin/plugin.json. — remote source; repo has a README, and each plugin dir has a .claude-plugin/plugin.json
  • License is stated. — MIT, in each plugin.json and at the repo root.

Security

  • No curl | bash, remote-code download/exec, or postinstall RCE.
  • No reading/exfiltration of secrets, tokens, .env, or env vars.
  • Hooks and MCP scope are least-privilege.

Neither plugin directory contains any executable code — mcp/ is a plugin.json, an .mcp.json, and a SKILL.md plus one reference file; cli/ is a plugin.json and a SKILL.md. No hooks, no scripts, no install step.

  • Network endpoints this plugin calls (and why): https://api.pingroom.io/api/agent/mcp — the hosted PingRoom MCP server, the only endpoint the pingroom-mcp plugin contacts. It is the product's own API. pingroom-cli contacts nothing on its own; it documents a CLI the user installs separately with npm i -g @pingroom/cli, which talks to the same host.
  • Credentials/permissions it requires (and why): the MCP server authenticates over OAuth at connect time (/mcp) so pings are attributed to the user's own PingRoom account and can only reach rooms that account is a member of. Nothing is read from the environment or the filesystem. The CLI holds its own token from pingroom activate / pingroom pair, stored by the CLI itself, outside the plugin.

Notes for reviewers

On "exactly one entry": this adds two, for the same reason mongodb/mongodb-atlas are two — they are different surfaces with different install stories (a hosted MCP connection vs. a locally installed CLI for shells and CI), and the skills cross-reference each other rather than duplicating. Their keywords are deliberately disjoint so the CTA fires for one or the other, never both: pingroom-mcp owns pingroom / ping room / pingroom mcp, and pingroom-cli owns the shell-scoped terms. Happy to split into two PRs or drop the CLI entry if you'd rather.

Both entries are named for their manifests. Verified end to end against grok 1.0.13: grok plugin validate passes on each directory, and installing from a marketplace source registers them as pingroom-mcp and pingroom-cli with the MCP server resolved — an entry named pingroom installed as pingroom-mcp, which would have made grok plugin list and uninstall disagree with the catalog.

The two plugins are also published as Claude Code plugins from the same repo, which is why the manifests live at .claude-plugin/plugin.json — accepted per CONTRIBUTING. mcp/.mcp.json was added alongside the inline mcpServers declaration so the server resolves the same way under Grok Build.

🤖 Generated with Claude Code

https://claude.ai/code/session_01HQtwQ9Mf8BZErMAzp764LE

Two sibling plugins from github.com/pingroom/skills, both pinned to
e08b3cf11722f66c9394842e83b0ab88d6daee51:

- pingroom (path: mcp) — hosted HTTP MCP connector plus its skill
- pingroom-cli (path: cli) — skill for the @pingroom/cli, no MCP server

Keywords are kept disjoint so the CTA doesn't double-fire: the MCP entry
owns "pingroom", the CLI entry owns the shell-scoped terms.

Claude-Session: https://claude.ai/code/session_01HQtwQ9Mf8BZErMAzp764LE
@mahdi-salmanzade
mahdi-salmanzade requested a review from a team September 3, 2026 12:46
Verified against grok 1.0.13: installing the catalog entry registers the
plugin under its manifest name, so an entry named `pingroom` installed as
`pingroom-mcp` and `grok plugin list`/`uninstall` disagreed with the catalog.
Renaming the entry keeps them consistent; the keywords are unchanged, so
`pingroom` still triggers the CTA.

The bumped sha picks up a Grok Build install section in the repo's README.

Claude-Session: https://claude.ai/code/session_01HQtwQ9Mf8BZErMAzp764LE
@mahdi-salmanzade mahdi-salmanzade changed the title feat(plugins): add pingroom and pingroom-cli feat(plugins): add pingroom-mcp and pingroom-cli Sep 3, 2026
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant