
alexey-pelykh/gripeventsctl
Developer toolsUnofficial CLI and MCP server for Grip-hosted event apps: attendee directory, profiles, interest swipes, chat and meetings
Overview
An unofficial CLI and MCP server for event apps hosted on Grip. It helps you network at an event you attend, from your terminal or through an AI assistant. It talks to a Grip-hosted event app with your own attendee session. It is for your own networking at an event you attend. "Grip" is the name of the event-networking platform run by Intros.at Ltd. This project uses the name only to say which platform your session belongs to. - Spam or unsolicited outreach - Mass swiping or mass messaging - Scraping attendee directories into lead lists - Contacting people outside the platform - Operating against an account that is not your own - Any behavior that breaks the platform's terms or burdens it If you see misuse of GripEventsCtl, report it as described in Abuse reporting in SECURITY.md. The friction in the code is on purpose: writes are off by default, repeats are blocked, and the platform's rate limits are honoured. Do not remove it.
README
GripEventsCtl
An unofficial CLI and MCP server for event apps hosted on Grip. It helps you network at an event you attend, from your terminal or through an AI assistant.
⚠️ Unofficial - Personal Use Only
GripEventsCtl is NOT affiliated with, endorsed by, or supported by Grip. It talks to a Grip-hosted event app with your own attendee session. It is for your own networking at an event you attend.
“Grip” is the name of the event-networking platform run by Intros.at Ltd. This project uses the name only to say which platform your session belongs to.
It is NOT for:
- Spam or unsolicited outreach
- Mass swiping or mass messaging
- Scraping attendee directories into lead lists
- Contacting people outside the platform
- Operating against an account that is not your own
- Any behavior that breaks the platform’s terms or burdens it
If you see misuse of GripEventsCtl, report it as described in Abuse reporting in SECURITY.md.
The friction in the code is on purpose: writes are off by default, repeats are blocked, and the platform’s rate limits are honoured. Do not remove it.
Status
This repository holds the workspace scaffold and, in @gripeventsctl/core, the transport client the commands will use (GripClient: the fixed base URL and header set, the config lookup, the login call, the response envelope and error kinds, the HTTP 429 backoff, paging, one request in flight per process). Of the commands below under “Planned surface”, only the three auth commands and the two events commands exist.
- Nothing is published to npm yet. The npm badges show “not found” until the first release.
- The binary answers
--version,--help, the threeauthcommands (auth signin,auth signout,auth status) and the twoeventscommands (events check,events list). It has no other commands. gripeventsctl mcpstarts the MCP server over stdio. The server lists two tools,gripeventsctl_events_checkandgripeventsctl_events_list.
Install
Planned, once the first version is published:
npm install -g gripeventsctl
Requires Node.js 22.19.0 or newer.
MCP Integration
gripeventsctl mcp starts a Model Context Protocol server over stdio. Each CLI command gets a twin MCP tool named gripeventsctl__. The exceptions are auth signin, auth signout and auth status, which are CLI-only.
Anything that can start gripeventsctl mcp can use your saved session. Do not give MCP access to agents you do not trust.
Attendee data is other people’s personal data. When an assistant calls a tool, the result enters its context, and your assistant host decides how long it keeps that data. Pick a host and a chat mode that match how you want that data handled. GripEventsCtl writes none of it to disk unless you ask for an export.
Authentication
You sign in yourself, in a terminal:
gripeventsctl auth signin
The slug is the last part of the event’s web address, https://matchmaking.grip.events/. The command looks the event up, asks for your email and your password (the password is never echoed), signs in once and stores the session. --email skips the email prompt; --container-id overrides the container id the event config names. There is no --password option, and the password is never read from an argument or an environment variable. With auth.credentials set to a 1Password item (op:/// holding a username and a password field), the command reads both from the 1Password CLI and needs no terminal.
The password never passes through an AI assistant. The MCP server has no sign-in tool: it only uses the session token that you already captured.
The session token is stored in one of two ways:
- In
~/.gripeventsctl.yamlwith file mode0600. - As a reference to a 1Password item, written as an
op://path.
auth signout removes the token. auth status shows whether you are signed in, for which event and since when, and reads the config file only. --json on any command gives machine-readable output on stdout; errors go to stderr with one exit code per kind of failure (see packages/cli/README.md).
Writes are gated
Reads are free. Three actions change something on the platform and notify another person:
- Show interest in an attendee, with an optional message of up to 250 characters.
- Skip an attendee.
- Send a chat message.
These rules apply to all three:
- They are off by default. You enable them in the config file.
- The repeat guard refuses a second action of the same kind against the same person.
- Every write is logged to the append-only send log.
- A message written by an assistant is never sent unless your go-ahead is recorded first.
- Every write supports
--dry-run, which shows what would be sent and sends nothing.
The tool honours the platform’s own rate limits.
Planned surface
Read tools:
| Command | What it will do |
|---|---|
events check |
Check whether an event slug runs on Grip |
events list |
List events you can reach |
attendees list --type |
List attendees of one type |
attendees dump |
Export the attendee directory when you ask |
attendees get |
Show one attendee profile |
attendance get |
Show one attendance record |
match status |
Show the match state with an attendee |
chat list |
List your chat threads |
chat thread |
Show the messages in one thread |
schedule info |
Show the event schedule |
Gated writes:
| Command | What it will do |
|---|---|
interest show --message |
Show interest, with an optional message |
interest skip |
Skip an attendee |
chat send |
Send a chat message |
Auth commands: auth signin, auth signout, auth status.
Development
Requires Node.js 22.19.0 or newer and pnpm 12.11.2.
pnpm install
pnpm build # build all packages with Turborepo
pnpm test # unit tests
pnpm test:coverage # unit tests with coverage
pnpm test:e2e # e2e tests against a live event app session
pnpm typecheck # type check all packages
pnpm lint # Prettier check, ESLint, secret-leakage and dependency-confusion checks
pnpm format # fix Prettier formatting
pnpm license-check # check dependency licenses
pnpm dev # watch mode
The packages are @gripeventsctl/core, @gripeventsctl/cli, @gripeventsctl/mcp, the umbrella gripeventsctl and the private @gripeventsctl/e2e and @gripeventsctl/testing. See CONTRIBUTING.md before you open a pull request.
Documentation
docs/api/: notes on the platform API, one page per surface. Each claim carries the date it was verified.docs/legitimacy.md: the project’s position on trademarks, platform terms and the AGPL choice.
Security
Do not open a public issue for a vulnerability. Follow SECURITY.md. Never paste a session token or your config file into an issue.
License
- Running
gripeventsctlas a CLI or MCP server does not put your own code under the AGPL. - Importing
@gripeventsctl/coreinto your code puts the combined work under the AGPL. - Changing and distributing GripEventsCtl means sharing your changes under the AGPL.
Install
npx gripeventsctl mcpConfiguration
{
"mcpServers": {
"gripeventsctl": {
"command": "npx",
"args": ["gripeventsctl", "mcp"]
}
}
}