| 49 | 49 | | | "Sends events" |
| 50 | 50 | | | "Alerts into chat" |
| 51 | 51 | | | "Sets your status" |
| 52 | | − | | "Finds a time" |
| 53 | 52 | | | "AI provider" |
| 54 | 53 | | | "Deploys" |
| 55 | 54 | | | "Syncs people"; |
| ⋯ |
| 72 | 71 | | personal?: { description?: string; status?: ConnectorStatus; capabilities?: ConnectorCapability[] }; |
| 73 | 72 | | /** More words search should find it by. */ |
| 74 | 73 | | keywords?: string[]; |
| 75 | | − | /** |
| 76 | | − | * The remote MCP server behind it, when the tool publishes one, and how |
| 77 | | − | * it signs in (`oauth`: the browser; `header`: a key an owner pastes; |
| 78 | | − | * `none`). Its connector is soon: see `mcp()` below. |
| 79 | | − | */ |
| 80 | | − | mcp?: { |
| 81 | | − | url: string; |
| 82 | | − | auth: "oauth" | "header" | "none"; |
| 83 | | − | /** For `header`: the header the key goes in (Authorization when unset). */ |
| 84 | | − | header?: string; |
| 85 | | − | /** What to know before connecting: where the key comes from, or that signing in needs an app g1t doesn't have yet. */ |
| 86 | | − | caveat?: string; |
| 87 | | − | }; |
| 88 | 74 | | }; |
| 89 | 75 | | |
| 90 | 76 | | /** A connector as one context (a workspace, or you) shows it. */ |
| ⋯ |
| 100 | 86 | | keywords: string[]; |
| 101 | 87 | | /** The other scope it can also be connected in. */ |
| 102 | 88 | | alsoIn: ConnectorScope | null; |
| 103 | | − | /** The MCP server behind it, when there is one. */ |
| 104 | | − | mcp: Connector["mcp"] | null; |
| 105 | 89 | | }; |
| 106 | 90 | | |
| 107 | 91 | | /** The categories, in the order the directory lists them. */ |
| ⋯ |
| 139 | 123 | | provider, |
| 140 | 124 | | keywords: ["model", "llm", ...keywords], |
| 141 | 125 | | }; |
| 142 | | − | } |
| 143 | | − | |
| 144 | | − | /** |
| 145 | | − | * A tool with a remote MCP server. Soon: Customize, where an owner |
| 146 | | − | * connected one, was retired with g1t's hosted agents, so nothing in g1t |
| 147 | | − | * connects to these servers today. The server is kept for when something |
| 148 | | − | * does; until then each person's own harness connects to it directly. |
| 149 | | − | */ |
| 150 | | − | function mcp( |
| 151 | | − | id: string, |
| 152 | | − | name: string, |
| 153 | | − | category: ConnectorCategory, |
| 154 | | − | description: string, |
| 155 | | − | server: NonNullable<Connector["mcp"]>, |
| 156 | | − | capabilities: ConnectorCapability[] = ["Agents can read", "Agents can act"], |
| 157 | | − | keywords: string[] = [], |
| 158 | | − | ): Connector { |
| 159 | | − | return { id, name, category, description, scopes: W, status: "soon", capabilities, keywords: ["mcp", ...keywords], mcp: server }; |
| 160 | 126 | | } |
| 161 | 127 | | |
| 162 | 128 | | /** A planned connector. */ |
| ⋯ |
| 189 | 155 | | }, |
| 190 | 156 | | keywords: ["git", "import", "sign in"], |
| 191 | 157 | | }, |
| 192 | | − | mcp("github-mcp", "GitHub (MCP)", "code", "Agents read and act on repositories, issues and pull requests on GitHub, through GitHub's MCP server.", { url: "https://api.githubcopilot.com/mcp/", auth: "header", header: "Authorization", caveat: "Paste a GitHub personal access token as Bearer <token>: GitHub's server takes one in place of a sign-in." }, ["Agents can read", "Agents can act"], ["issues", "pull requests"]), |
| 193 | 158 | | { |
| 194 | 159 | | id: "webhooks", |
| 195 | 160 | | name: "Webhooks", |
| ⋯ |
| 231 | 196 | | }, |
| 232 | 197 | | keywords: ["tracker", "tickets"], |
| 233 | 198 | | }, |
| 234 | | − | mcp("linear-mcp", "Linear (MCP)", "issues", "Agents search, create and update issues, projects and cycles in Linear, through Linear's MCP server.", { url: "https://mcp.linear.app/mcp", auth: "oauth" }, ["Agents can read", "Agents can act"], ["tracker", "issues"]), |
| 235 | 199 | | { |
| 236 | 200 | | id: "jira", |
| 237 | 201 | | name: "Jira", |
| ⋯ |
| 244 | 208 | | provider: "jira", |
| 245 | 209 | | keywords: ["atlassian", "tracker", "tickets"], |
| 246 | 210 | | }, |
| 247 | | − | mcp("asana", "Asana", "issues", "Agents read, create and update tasks and projects in Asana, through Asana's MCP server.", { url: "https://mcp.asana.com/v2/mcp", auth: "oauth", caveat: "Asana signs in only apps registered with it, and g1t isn't one yet: signing in here fails until it is." }, ["Agents can read", "Agents can act"], ["tasks", "projects"]), |
| 248 | 211 | | soon("shortcut", "Shortcut", "issues", W, "Stories agents read when work mentions them, updated when the work lands.", ["Agents can read", "Writes back"]), |
| 249 | 212 | | soon("clickup", "ClickUp", "issues", W, "Tasks agents can read and import, kept in step with their pull requests.", ["Agents can read", "Writes back"]), |
| 250 | 213 | | soon("trello", "Trello", "issues", W, "Cards become issues, and move along their board as the work does.", ["Opens issues", "Writes back"]), |
| 251 | 214 | | |
| 252 | 215 | | // Chat & meetings ------------------------------------------------------- |
| 253 | | − | soon("slack", "Slack", "chat", BOTH, "Alerts and agent updates in the channels your team already reads, and agents to talk to there.", ["Alerts into chat", "Agents can act"], { |
| 216 | + | soon("slack", "Slack", "chat", BOTH, "Alerts and updates in the channels your team already reads.", ["Alerts into chat"], { |
| 254 | 217 | | description: "Your status in g1t follows the one you set in Slack, and the other way round.", |
| 255 | 218 | | capabilities: ["Sets your status"], |
| 256 | 219 | | }), |
| 257 | | − | soon("microsoft-teams", "Microsoft Teams", "chat", BOTH, "Alerts and agent updates posted to Teams channels, with agents to talk to there.", ["Alerts into chat", "Agents can act"], { |
| 220 | + | soon("microsoft-teams", "Microsoft Teams", "chat", BOTH, "Alerts and updates posted to Teams channels.", ["Alerts into chat"], { |
| 258 | 221 | | description: "Your status in g1t follows your Teams presence.", |
| 259 | 222 | | capabilities: ["Sets your status"], |
| 260 | 223 | | }), |
| 261 | | − | soon("discord", "Discord", "chat", W, "Releases, alerts and agent updates posted to a Discord server.", ["Alerts into chat"]), |
| 224 | + | soon("discord", "Discord", "chat", W, "Releases, alerts and updates posted to a Discord server.", ["Alerts into chat"]), |
| 262 | 225 | | soon("zoom", "Zoom", "chat", BOTH, "Meeting notes and recordings agents can read when work refers to them.", ["Agents can read"], { |
| 263 | 226 | | description: "Sets your status to On a call while you are in a Zoom meeting.", |
| 264 | 227 | | capabilities: ["Sets your status"], |
| ⋯ |
| 266 | 229 | | soon("google-meet", "Google Meet", "chat", P, "Sets your status to On a call while you are in a meeting, and starts a call from any channel.", ["Sets your status"]), |
| 267 | 230 | | |
| 268 | 231 | | // Calendar & email ------------------------------------------------------ |
| 269 | | − | soon("google-calendar", "Google Calendar", "calendar", P, "Sets your status to In a meeting while you are in one; agents can find a time that suits everyone.", ["Sets your status", "Finds a time"]), |
| 270 | | − | soon("outlook-calendar", "Outlook Calendar", "calendar", P, "Sets your status to In a meeting while you are in one; agents can find a time that suits everyone.", ["Sets your status", "Finds a time"]), |
| 271 | | − | soon("gmail", "Gmail", "calendar", P, "Forward a thread to an agent, or turn an email into an issue, from your own inbox.", ["Opens issues", "Agents can read"]), |
| 272 | | − | soon("outlook-mail", "Outlook Mail", "calendar", P, "Forward a thread to an agent, or turn an email into an issue, from your own inbox.", ["Opens issues", "Agents can read"]), |
| 232 | + | soon("google-calendar", "Google Calendar", "calendar", P, "Sets your status to In a meeting while you are in one.", ["Sets your status"]), |
| 233 | + | soon("outlook-calendar", "Outlook Calendar", "calendar", P, "Sets your status to In a meeting while you are in one.", ["Sets your status"]), |
| 234 | + | soon("gmail", "Gmail", "calendar", P, "Turn an email into an issue, from your own inbox.", ["Opens issues"]), |
| 235 | + | soon("outlook-mail", "Outlook Mail", "calendar", P, "Turn an email into an issue, from your own inbox.", ["Opens issues"]), |
| 273 | 236 | | |
| 274 | 237 | | // Docs & knowledge ------------------------------------------------------ |
| 275 | | − | mcp("notion", "Notion", "docs", "Agents search, read and write Notion pages and databases, through Notion's MCP server.", { url: "https://mcp.notion.com/mcp", auth: "oauth" }, ["Agents can read", "Agents can act"], ["pages", "wiki", "databases"]), |
| 276 | | − | mcp("atlassian", "Atlassian (Jira and Confluence)", "docs", "Agents search and update Jira issues and Confluence pages, through Atlassian's MCP server.", { url: "https://mcp.atlassian.com/v1/mcp", auth: "oauth" }, ["Agents can read", "Agents can act"], ["jira", "confluence", "tickets", "wiki"]), |
| 277 | 238 | | soon("google-docs", "Google Docs", "docs", BOTH, "Agents read the specs and plans linked from issues and chat.", ["Agents can read"], { |
| 278 | 239 | | description: "Docs you share in chat open for agents as well as people.", |
| 279 | 240 | | capabilities: ["Agents can read"], |
| 280 | 241 | | }), |
| 281 | | − | mcp("zapier", "Zapier", "data", "Agents run the actions you expose from Zapier, across thousands of apps, through Zapier's MCP server.", { url: "https://mcp.zapier.com/api/mcp/mcp", auth: "header", header: "Authorization", caveat: "Paste the token from your Zapier MCP settings as Bearer <token>." }, ["Agents can act"], ["automation", "apps"]), |
| 282 | 242 | | soon("coda", "Coda", "docs", W, "Agents read the docs and tables linked from issues and chat.", ["Agents can read"]), |
| 283 | 243 | | |
| 284 | 244 | | // Monitoring & incidents ------------------------------------------------ |
| ⋯ |
| 318 | 278 | | provider: "webhook", |
| 319 | 279 | | keywords: ["incoming", "http", "alerts", "pagerduty", "grafana"], |
| 320 | 280 | | }, |
| 321 | | − | mcp("sentry-mcp", "Sentry (MCP)", "monitoring", "Agents search issues, read stack traces and look up errors in Sentry, through Sentry's MCP server.", { url: "https://mcp.sentry.dev/mcp", auth: "oauth" }, ["Agents can read", "Agents can act"], ["errors", "issues"]), |
| 322 | | − | soon("pagerduty", "PagerDuty", "monitoring", BOTH, "Incidents open issues an agent can start on, and resolve when the fix lands.", ["Opens issues", "Writes back"], { |
| 281 | + | soon("pagerduty", "PagerDuty", "monitoring", BOTH, "Incidents open issues, and resolve when the fix lands.", ["Opens issues", "Writes back"], { |
| 323 | 282 | | description: "Sets your status to On call while you are on call.", |
| 324 | 283 | | capabilities: ["Sets your status"], |
| 325 | 284 | | }), |
| 326 | 285 | | soon("opsgenie", "Opsgenie", "monitoring", W, "Alerts open issues, and close when the fix lands.", ["Opens issues", "Writes back"]), |
| 327 | | − | soon("incident-io", "incident.io", "monitoring", W, "Incidents get a channel in g1t, with agents to dig through what changed.", ["Opens issues", "Alerts into chat"]), |
| 286 | + | soon("incident-io", "incident.io", "monitoring", W, "Incidents get a channel in g1t, with what changed alongside.", ["Opens issues", "Alerts into chat"]), |
| 328 | 287 | | soon("grafana", "Grafana", "monitoring", W, "Alert rules open issues, and agents read the dashboards they link to.", ["Opens issues", "Agents can read"]), |
| 329 | 288 | | soon("new-relic", "New Relic", "monitoring", W, "Alerts open issues, with the traces agents need to find the cause.", ["Opens issues", "Agents can read"]), |
| 330 | 289 | | soon("honeycomb", "Honeycomb", "monitoring", W, "Triggers open issues, and agents query traces while they work.", ["Opens issues", "Agents can read"]), |
| 331 | 290 | | soon("better-stack", "Better Stack", "monitoring", W, "Uptime incidents and log alerts open issues.", ["Opens issues"]), |
| 332 | 291 | | |
| 333 | 292 | | // Cloud & deploy -------------------------------------------------------- |
| 334 | | − | mcp("cloudflare", "Cloudflare", "cloud", "Agents read your Cloudflare account's Workers, storage and settings, and look things up in its docs, through Cloudflare's MCP servers.", { url: "https://bindings.mcp.cloudflare.com/mcp", auth: "oauth" }, ["Agents can read", "Agents can act"], ["workers", "r2", "d1", "dns"]), |
| 335 | | − | mcp("cloudflare-docs", "Cloudflare docs", "docs", "Agents search Cloudflare's documentation while they work.", { url: "https://docs.mcp.cloudflare.com/mcp", auth: "none" }, ["Agents can read"], ["documentation"]), |
| 336 | 293 | | soon("aws", "Amazon Web Services", "cloud", W, "Workflows and deployments reach AWS with short-lived credentials, no stored keys.", ["Deploys"]), |
| 337 | 294 | | soon("google-cloud", "Google Cloud", "cloud", W, "Workflows and deployments reach Google Cloud with short-lived credentials.", ["Deploys"]), |
| 338 | 295 | | soon("azure", "Microsoft Azure", "cloud", W, "Workflows and deployments reach Azure with short-lived credentials.", ["Deploys"]), |
| 339 | | − | mcp("vercel", "Vercel", "cloud", "Agents read your Vercel projects, deployments and logs, through Vercel's MCP server.", { url: "https://mcp.vercel.com", auth: "oauth" }, ["Agents can read", "Agents can act"], ["deployments", "previews"]), |
| 340 | 296 | | soon("netlify", "Netlify", "cloud", W, "Deploy previews as checks on pull requests.", ["Deploys", "Agents can read"]), |
| 341 | 297 | | soon("fly-io", "Fly.io", "cloud", W, "Deploy apps from workflows, and roll back from the deployment's page.", ["Deploys"]), |
| 342 | 298 | | soon("kubernetes", "Kubernetes", "cloud", W, "Roll out to your own clusters from workflows, with each rollout's status on g1t.", ["Deploys"]), |
| ⋯ |
| 369 | 325 | | }, |
| 370 | 326 | | soon("amazon-bedrock", "Amazon Bedrock", "ai", W, "Models in your own AWS account, billed there.", ["AI provider"]), |
| 371 | 327 | | soon("vertex-ai", "Google Vertex AI", "ai", W, "Models in your own Google Cloud project, billed there.", ["AI provider"]), |
| 372 | | − | mcp("hugging-face", "Hugging Face", "ai", "Agents search models, datasets, papers and Spaces on the Hub, through Hugging Face's MCP server.", { url: "https://huggingface.co/mcp", auth: "oauth" }, ["Agents can read"], ["models", "datasets", "hub"]), |
| 373 | | − | mcp("context7", "Context7", "docs", "Agents read current documentation for the libraries a codebase uses, through Context7's MCP server.", { url: "https://mcp.context7.com/mcp", auth: "none" }, ["Agents can read"], ["documentation", "libraries"]), |
| 374 | | − | mcp("microsoft-learn", "Microsoft Learn", "docs", "Agents search Microsoft's documentation for Azure, .NET and Windows, through Microsoft Learn's MCP server.", { url: "https://learn.microsoft.com/api/mcp", auth: "none" }, ["Agents can read"], ["azure", "dotnet", "documentation"]), |
| 375 | | − | mcp("deepwiki", "DeepWiki", "docs", "Agents read generated documentation for public repositories, through DeepWiki's MCP server.", { url: "https://mcp.deepwiki.com/mcp", auth: "none" }, ["Agents can read"], ["repositories", "documentation"]), |
| 376 | 328 | | |
| 377 | 329 | | // Data & analytics ------------------------------------------------------ |
| 378 | 330 | | soon("postgresql", "PostgreSQL", "data", W, "Agents read your schema, and run read-only queries while they investigate.", ["Agents can read"]), |
| 379 | 331 | | soon("snowflake", "Snowflake", "data", W, "Agents answer questions from your warehouse with read-only queries.", ["Agents can read"]), |
| 380 | 332 | | soon("bigquery", "BigQuery", "data", W, "Agents answer questions from your datasets with read-only queries.", ["Agents can read"]), |
| 381 | | − | mcp("posthog", "PostHog", "data", "Agents read product analytics, feature flags and errors in PostHog, through PostHog's MCP server.", { url: "https://mcp.posthog.com/mcp", auth: "oauth" }, ["Agents can read", "Agents can act"], ["analytics", "feature flags"]), |
| 382 | | − | mcp("supabase", "Supabase", "data", "Agents read your Supabase projects, schemas and logs, and run queries, through Supabase's MCP server.", { url: "https://mcp.supabase.com/mcp", auth: "oauth" }, ["Agents can read", "Agents can act"], ["postgres", "database"]), |
| 383 | | − | mcp("neon", "Neon", "data", "Agents read and manage Neon Postgres projects and branches, through Neon's MCP server.", { url: "https://mcp.neon.tech/mcp", auth: "oauth" }, ["Agents can read", "Agents can act"], ["postgres", "database"]), |
| 384 | 333 | | soon("amplitude", "Amplitude", "data", W, "Agents read the charts that work refers to.", ["Agents can read"]), |
| 385 | 334 | | soon("segment", "Segment", "data", W, "Agents read your tracking plan, and check new events against it.", ["Agents can read"]), |
| 386 | 335 | | |
| 387 | 336 | | // CRM & support --------------------------------------------------------- |
| 388 | 337 | | soon("zendesk", "Zendesk", "crm", W, "Turn a ticket into an issue, and tell the customer when the fix ships.", ["Opens issues", "Writes back"]), |
| 389 | | − | mcp("intercom", "Intercom", "crm", "Agents search conversations, contacts and companies in Intercom, through Intercom's MCP server.", { url: "https://mcp.intercom.com/mcp", auth: "oauth" }, ["Agents can read", "Agents can act"], ["support", "conversations", "customers"]), |
| 390 | | − | mcp("hubspot", "HubSpot", "crm", "Agents read contacts, companies and deals in HubSpot, through HubSpot's MCP server.", { url: "https://mcp.hubspot.com/anthropic", auth: "oauth", caveat: "HubSpot signs in only apps registered with it, and g1t isn't one yet: signing in here fails until it is." }, ["Agents can read", "Agents can act"], ["crm", "contacts", "deals"]), |
| 391 | 338 | | soon("salesforce", "Salesforce", "crm", W, "Agents read the account and case behind a request.", ["Agents can read"]), |
| 392 | | − | mcp("stripe", "Stripe", "crm", "Agents read customers, payments and subscriptions, and look things up in Stripe's docs, through Stripe's MCP server.", { url: "https://mcp.stripe.com", auth: "oauth" }, ["Agents can read", "Agents can act"], ["payments", "billing", "customers"]), |
| 393 | | − | mcp("paypal", "PayPal", "crm", "Agents read and manage orders, invoices and subscriptions, through PayPal's MCP server.", { url: "https://mcp.paypal.com/mcp", auth: "oauth" }, ["Agents can read", "Agents can act"], ["payments", "invoices"]), |
| 394 | 339 | | |
| 395 | 340 | | // Design ---------------------------------------------------------------- |
| 396 | | − | mcp("figma", "Figma", "design", "Agents read designs, components and variables from your Figma files, and build to them, through Figma's MCP server.", { url: "https://mcp.figma.com/mcp", auth: "oauth" }, ["Agents can read"], ["design", "frames", "components"]), |
| 397 | | − | mcp("canva", "Canva", "design", "Agents search, create and export Canva designs, through Canva's MCP server.", { url: "https://mcp.canva.com/mcp", auth: "oauth" }, ["Agents can read", "Agents can act"], ["design", "slides"]), |
| 398 | 341 | | soon("miro", "Miro", "design", W, "Agents read the boards linked from issues and chat.", ["Agents can read"]), |
| 399 | 342 | | soon("storybook", "Storybook", "design", W, "Each pull request's stories as a check, with what changed.", ["Agents can read"]), |
| 400 | 343 | | |
| ⋯ |
| 446 | 389 | | provider: connector.provider ?? null, |
| 447 | 390 | | keywords: connector.keywords ?? [], |
| 448 | 391 | | alsoIn: connector.scopes.includes(other) ? other : null, |
| 449 | | − | mcp: connector.mcp ?? null, |
| 450 | 392 | | }; |
| 451 | 393 | | } |
| 452 | 394 | | |