mcpbeat

Latchkey

imbue-ai/latchkey

Interact with third-party or self-hosted services (Slack, Google Workspace, Dropbox, GitHub, Linear, Coolify...) using their HTTP APIs on the user's behalf.

1k tokens
context cost
the whole folder, loaded on every use
1
files
instructions only
0
copies elsewhere
how many repositories repackaged it
121
stars on the repo
on the repository, not the skill itself

Install

one command, takes just this skill from the repository
npx skills add https://github.com/imbue-ai/latchkey --skill latchkey

The instruction itself

14 sections, as written by the author

Latchkey

Instructions

Latchkey is a CLI tool that automatically injects credentials into curl commands. Credentials (mostly API tokens) can be either manually managed or, for some services, Latchkey can open a browser login pop-up window and extract API credentials from the session.

Use this skill when the user asks you to work on their behalf with services that have HTTP APIs, like AWS, GitLab, Google Drive, Discord or others.

Usage:

  • Use latchkey curl instead of regular curl for supported services.
  • Pass through all regular curl arguments - latchkey is a transparent wrapper.
  • Check for latchkey services list to get a list of supported services. Use --viable to only show the currently configured ones.
  • Use latchkey services info <service_name> to get information about a specific service (auth options, credentials status, API docs links, special requirements, etc.).
  • If necessary, ask the user to configure credentials first. Tell the user to run latchkey auth set on the machine where latchkey is installed (using the setCredentialsExample from the services info command).
  • Alternatively, let the user log in with the browser. If supported for the given service, run latchkey auth browser <service_name> to open a browser login pop-up window.
  • Look for the newest documentation of the desired public API online. If using the browser auth command, avoid bot-only endpoints.
  • Do not initiate a new login if the credentials status is valid or unknown - the user might just not have the necessary permissions for the action you're trying to do.

Examples

Make an authenticated curl request

latchkey curl [curl arguments]

Creating a Slack channel

latchkey curl -X POST 'https://slack.com/api/conversations.create' \
  -H 'Content-Type: application/json' \
  -d '{"name":"my-channel"}'

(Notice that -H 'Authorization: Bearer is not present in the invocation.)

Getting Discord user info

latchkey curl 'https://discord.com/api/v10/users/@me'

Detect expired credentials and force a new login to Discord

latchkey services info discord  # Check the "credentialStatus" field - shows "invalid"
latchkey auth browser discord
latchkey curl 'https://discord.com/api/v10/users/@me'

Only do this when you notice that your previous call ended up not being authenticated (HTTP 401 or 403).

List usable services

latchkey services list --viable

Lists services that either have stored credentials or can be authenticated via a browser.

Get service-specific info

latchkey services info slack

Returns auth options, credentials status, and developer notes

about the service. If browser is not present in the

authOptions field, the service requires the user to directly

set API credentials via latchkey auth set or `latchkey auth

set-nocurl` before making requests.

Storing credentials

Aside from the latchkey auth browser case, it is the user's responsibility to supply credentials.

The user would typically do something like this:

latchkey auth set my-gitlab-instance -H "PRIVATE-TOKEN: <token>"

When credentials cannot be expressed as static curl arguments, the user would use the set-nocurl subcommand. For example:

latchkey auth set-nocurl aws <access-key-id> <secret-access-key>

If a service doesn't appear with the --viable flag, it may

still be supported; the user just hasn't provided the

credentials yet. latchkey service info <service_name> can be

used to see how to provide credentials for a specific service.

Using multiple accounts

It is possible to associate credentials with a specific account:

latchkey --account [email protected] auth set ...

And then reference it in curl calls:

latchkey --account [email protected] curl ...

The --account option must go right after latchkey.

You can see the existing accounts as keys in the credential

dictionary produced by latchkey services info. An empty string

in the key means "unknown account".

Notes

  • All curl arguments are passed through unchanged
  • Return code, stdout and stderr are passed back from curl
  • Credentials are always stored encrypted and are never transmitted anywhere beyond the endpoints specified by the actual curl calls.

Currently supported services

Latchkey currently offers varying levels of support for the

following services: AWS, Calendly, Coolify, Discord, Dropbox, Figma, GitHub, GitLab,

Gmail, Google Analytics, Google Calendar, Google Docs, Google Drive, Google Sheets,

Linear, Mailchimp, Notion, Ramp, Sentry, Slack, Stripe, Telegram, Todoist, Umami, Yelp, Zoom, and more.

User-registered services

Note for humans: users can also add limited support for new services

at runtime using the latchkey services register command.

How to use it

Copy the folder

Take imbue-ai/latchkey from the repository into ~/.claude/skills for personal use, or into .claude/skills inside a project.

Check the name does not clash

The agent identifies a skill by the name field in its header. Two skills with the same name cannot sit side by side — one of them will be ignored.

Install what it needs

The instructions reference npm. Without those the skill loads but fails at the first command.