Quidli Connect MCP
OfficialQuidli Connect MCP
Identität und Reputation für Agents. Lösen Sie einen Social-Handle in eine Wallet auf, prüfen Sie die Reputation und senden Sie Token – aus Cursor, Claude Desktop, Claude Code oder jedem MCP-kompatiblen Client.
In einem Befehl ausprobieren
Kein API-Schlüssel erforderlich.
Hosted – zu Claude Code hinzufügen:
claude mcp add --transport http quidli https://mcp.connect.quid.li/Lokal – läuft auf Ihrem Rechner:
npx -y @quidli/connect-mcpFragen Sie dann Ihren Agenten:
Lösen Sie den Farcaster-Handle
ahn.ethin eine Wallet auf.{ "status": "completed", "results": [ { "type": "farcaster", "value": "ahn.eth", "ethWalletAddress": "0x07De92Ce6474D718c80e696516bf0bE53290fF5E", "solWalletAddress": "9DD2CqPKZJoo7ZRgCXxJNMjhzfgVihSKtkZpn8qnEWK9" } ] }
Die Auflösung funktioniert über Telegram, Discord, Farcaster, X, GitHub, LinkedIn, E-Mail und Telefon – und erzeugt eine Wallet für Personen, die Quidli noch nie verwendet haben.
Lookup, Scores, Agent und Preis funktionieren ohne Schlüssel unter einem gemeinsamen anonymen Kontingent. Fügen Sie einen Connect-API-Schlüssel hinzu, für höhere Limits, Ihr eigenes Profil (connect_me) und Smart Send.
Related MCP server: MCPAGENT
Verbindungsart wählen
Hosted ( | Local ( | |
Setup | Eine URL in den MCP-Einstellungen eintragen | Einen lokalen Prozess über |
Auth | Optionaler API-Schlüssel. Ohne Schlüssel: Lookup/Scores/Agent/Preis unter einem gemeinsamen anonymen Kontingent | API-Schlüssel, per Pay-per-Call (x402) oder keiner für Lookup/Scores/Agent |
Vorteile | Keine Installation; ohne Schlüssel ausprobierbar; läuft immer auf Quidli-Infrastruktur | Der private Wallet-Schlüssel verlässt Ihren Rechner nie; Pay-per-Call mit USDC statt eines API-Schlüssels |
Nachteile | Anonymer Datenverkehr teilt sich ein globales Rate-Limit; keine Pay-per-Call-Abrechnung | Erfordert Node.js 20+; |
Einschränkungen | Kein x402-/Wallet-Auth möglich – senden Sie keinen privaten Schlüssel an den gehosteten Endpunkt | x402-Modus benötigt USDC auf Base (Mainnet |
Einen Connect-API-Schlüssel erhalten Sie unter connect.quid.li → API-Zugriff aktivieren für höhere Limits, connect_me und Smart Send.
Hosted (empfohlen)
Keine lokale Einrichtung. Lookup, Scores, Agent und Preis funktionieren ohne einen API-Schlüssel (gemeinsames anonymes Kontingent). Fügen Sie einen Schlüssel hinzu für höhere Limits, Ihr Profil (connect_me) und Smart Send.
Cursor
Falls Sie bereits andere MCP-Server haben: Überspringen Sie den Deeplink und fügen Sie ihn manuell hinzu – die Ein-Klick-Installation kann in einigen Cursor-Versionen Ihre gesamte mcp.json überschreiben.
Oder fügen Sie es in Cursor Settings → MCP → Add new MCP server ein:
cursor://anysphere.cursor-deeplink/mcp/install?name=quidli-connect&config=eyJ1cmwiOiJodHRwczovL21jcC5jb25uZWN0LnF1aWQubGkifQ==Manuell hinzufügen {#cursor-manual}
Fügen Sie dies in ~/.cursor/mcp.json (global) oder .cursor/mcp.json (Projekt) unter mcpServers ein – ersetzen Sie dabei nicht Ihre vorhandenen Einträge:
"quidli-connect": {
"url": "https://mcp.connect.quid.li"
}Optional – für höhere Limits und Smart Send:
"quidli-connect": {
"url": "https://mcp.connect.quid.li",
"headers": {
"x-api-key": "<your-connect-api-key>"
}
}Claude Desktop
Öffnen Sie Claude → Settings → Connectors (oder in älteren Versionen Settings → Developer → Edit Config).
Fügen Sie eine benutzerdefinierten MCP-Connector mit der URL
https://mcp.connect.quid.lihinzu. Setzen Sie optional den Headerx-api-key: <eigener-connect-api-schlüssel>.
Oder fügen Sie das in Ihre Konfigurationsdatei ein und starten Sie Claude neu:
macOS:
~/Library/Application Support/Claude/claude_desktop_config.jsonWindows:
%APPDATA%\Claude\claude_desktop_config.json
{
"mcpServers": {
"quidli-connect": {
"url": "https://mcp.connect.quid.li"
}
}
}Wenn Ihre Claude-Version keine entfernten url-Connectors unterstützt, verwenden Sie stattdessen die lokale Brücke (weiterhin gehostete API, es läuft nur ein kleiner lokaler Helfer):
{
"mcpServers": {
"quidli-connect": {
"command": "npx",
"args": [
"-y",
"mcp-remote@latest",
"--http",
"https://mcp.connect.quid.li"
]
}
}
}Für die Brücke ist Node.js 20+ erforderlich. Starte Sie Claude Desktop nach dem Speichern neu. Sie sollten ein Hammer-Symbol im Chat-Eingabefeld sehen, sobald Tools verfügbar sind.
Ohne Schlüssel sind initialize/tools/list immer erfolgreich. Anonyme tools/call teilen sich eine globale Quote (HTTP 429 bei Überschreitung – für höhere Limits einen Schlüssel verwenden). Platzhalter-Schlüssel liefern weiterhin 401.
Local (stdio)
Am besten geeignet, wenn Sie Pay-per-Call mit einer Wallet mögen oder Zugangsdaten lieber in einer lokalen Env-Datei speichern.
Erfordert Node.js 20+.
Cursor
Fügen Sie eines der Folgenden zu .cursor/mcp.json (Projekt) oder zu den globalen MCP-Einstellungen hinzu.
Option A – API-Schlüssel
Gleiches Abrechnungsmodell wie bei Hosted; Zugangsdaten bleiben auf Ihrem Rechner.
{
"mcpServers": {
"quidli-connect": {
"command": "npx",
"args": ["-y", "@quidli/connect-mcp"],
"env": {
"CONNECT_API_KEY": "<your-connect-api-key>",
"CONNECT_API_BASE_URL": "https://api.connect.quid.li"
}
}
}
}Option B – x402-Pay-per-Call (Wallet)
Kein API-Schlüssel. Authentifizierte Aufrufe zahlen automatisch, wenn die API HTTP 402 liefert. Der private Wallet-Schlüssel wird nur vom lokalen Prozess gelesen.
{
"mcpServers": {
"quidli-connect": {
"command": "npx",
"args": ["-y", "@quidli/connect-mcp"],
"env": {
"EVM_PRIVATE_KEY": "0x<wallet-with-usdc-on-base>",
"CONNECT_API_BASE_URL": "https://api.connect.quid.li",
"CONNECT_X402_EVM_NETWORK": "8453"
}
}
}
}Verwenden Sie 84532 für Base Sepolia, wenn Sie auf eine Staging-API zeigen.
Option C – ohne Zugangsdaten (Lookup / Scores / Agent)
Der MCP-Prozess startet ohne CONNECT_API_KEY oder EVM_PRIVATE_KEY. connect_lookup, connect_scores_*, connect_agent_prompt und connect_get_price rufen die API ohne Zugangsdaten auf. Das funktioniert, wenn x402 deaktiviert ist (Preis 0, typisch für lokal). Auf Produktionsinstanzen mit x402 liefern diese Tools HTTP 402, bis Sie einen Schlüssel oder eine Wallet einrichten bereit.
connect_me, connect_drop und connect_drop_balance erfordern weiterhin CONNECT_API_KEY.
{
"mcpServers": {
"quidli-connect": {
"command": "npx",
"args": ["-y", "@quidli/connect-mcp"],
"env": {
"CONNECT_API_BASE_URL": "http://127.0.0.1:3011"
}
}
}
}Claude Desktop
Öffnen Sie Claude → Settings → Developer → Edit Config (klappt nur nach aktivieren des Developer-Modus).
Fügen Sie einen der folgenden Blöcke unter
mcpServersein in:macOS:
~/Library/Application Support/Claude/claude_desktop_config.jsonWindows:
%APPDATA%\Claude\claude_desktop_config.json
Starte Claude Desktop neu.
Option A – API-Schlüssel
{
"mcpServers": {
"quidli-connect": {
"command": "npx",
"args": ["-y", "@quidli/connect-mcp"],
"env": {
"CONNECT_API_KEY": "<your-connect-api-key>",
"CONNECT_API_BASE_URL": "https://api.connect.quid.li"
}
}
}
}Option B – x402-Pay-per-Call (Wallet)
{
"mcpServers": {
"quidli-connect": {
"command": "npx",
"args": ["-y", "@quidli/connect-mcp"],
"env": {
"EVM_PRIVATE_KEY": "0x<wallet-with-usdc-on-base>",
"CONNECT_API_BASE_URL": "https://api.connect.quid.li",
"CONNECT_X402_EVM_NETWORK": "8453"
}
}
}
}Wenn sowohl CONNECT_API_KEY als auch EVM_PRIVATE_KEY gesetzt sind, wird der API-Schlüssel verwendet.
Zugangsdaten sind im lokalen Modus optional. Ohne beide Variablen funktionieren Lookup/Scores/Agent weiterhin, wenn die API kein x402 erhebt. connect_me und Smart Send benötigen CONNECT_NAPI_KEY.
Tools
Tool | Funktion |
| Referenzpreise anzeigen (ohne Auth) |
| Soziale Identitäten in EVM- und SOL-Wallet-Adressen auflösen |
| Plattformen auflisten, die ein Empfänger auf Connect und freigegeben hat |
| Scores als Batch für diese oder Benutzernamen abrufen |
| Scores für ein verknüpftes Konto abrufen |
| Scores für einen Connect-Benutzernamen abrufen |
| Profil-, Score- und Account-Daten des API-Schlüssel-Inhabers – nur API-Schlüssel |
| Smart Send (Batch-Token-Transfer) – nur API-Schlüssel |
| Smart-Send-Wallet-Salden auf einer Chain – nur API-Schlüssel |
| Natural-language-Agent für die Ermittlung von Empfängern |
Bitte Bitten Sie Ihren Client, diese Tools zu verwenden, wenn Sie Connect-Daten- oder Aktionen brauchen.# Quidli Connect MCP
Identität und Reputation für Agents. Lösen Sie einen Social-Handle in eine Wallet auf, prüfen Sie die Reputation und senden Sie Tokens – aus Cursor, Claude Desktop, Claude Code oder jedem MCP-kompatiblen Client.
In einem Befehl ausprobieren
Kein API-Schlüssel erforderlich.
Hosted – zu Claude Code hinzufügen:
claude mcp add --transport http quidli https://mcp.connect.quid.li/Lokal – läuft auf Ihrem Rechner:
npx -y @quidli/connect-mcpFragen Sie dann Ihren Agenten:
Bitte lösen Sie den Farcaster-Handle
ahn.ethin eine Wallet auf.
{
"status": "completed",
"results": [
{
"type": "farcaster",
"value": "ahn.eth",
"ethWalletAddress": "0x07De92Ce6474D718c80e696516bf0bE53290fF5E",
"solWalletAddress": "9DD2CqPKZJoo7ZRgCXxJNMjhzfgVihSKtkZpn8qnEWK9"
}
]
}Die Auflösung funktioniert über Telegram, Discord, Farcaster, X, GitHub, LinkedIn, E-Mail und Telefon – und erzeugt eine Wallet für Personen, die Quidli noch nie verwendet haben.
Lookup, Scores, Agent und Preis funktionieren ohne Schlüssel unter einem gemeinsamen anonymen Kontingent. Fügen Sie einen Connect-API-Schlüssel hinzu, für höhere Limits, Ihr eigenes Profil (connect_me) und Smart Send.
Verbindungsart wählen
Hosted ( | Local ( | |
Setup | Eine URL in den MCP-Einstellungen hinzufügen | Einen lokalen Prozess über |
Auth | Optionaler API-Schlüssel. Ohne Schlüssel: Lookup/Scores/Agent/Preis unter einem gemeinsamen anonymen Kontingent | API-Schlüssel, x402-Pay-per-Call oder keine für Lookup/Scores/Agent |
Vorteile | Keine Installation; ohne Schlüssel ausprobierbar; läuft immer auf Quidli-Infrastruktur | Der private Schlüssel der Wallet verlässt nie Ihren Rechner; Pay-per-Call mit USDC statt eines API-Schlüssels |
Nachteile | Anonymer Traffic teilt sich ein globales Rate-Limit; keine Pay-per-Call-Abrechnung | Erfordert Node.js 20+; |
Einschränkungen | Kein x402-/Wallet-Auth möglich – nicht einen privaten Schlüssel an den gehosteten Endpunkt senden | Der x402-Modus benötigt USDC auf Base (Mainnet |
Holen Sie sich einen Connect-API-Schlüssel unter connect.quid.li → API-Zugriff aktivieren für höhere Limits, connect_me und Smart Send.
Hosted (empfohlen)
Keine lokale Einrichtung erforderlich. Lookup, Scores, Agent und Preis funktionieren ohne API-Schlüssel (gemeinsames anonymes Kontingent). Fügen Sie einen Schlüssel hinzu für höhere Limits, Ihr Profil (connect_me) und Smart Send.
Cursor
Falls Sie bereits andere MCP-Server haben: Überspringen Sie den Deeplink und fügen Sie ihn manuell hinzu – die Ein-Klick-Installation kann in einigen Cursor-Versionen Ihre gesamte mcp.json überschreiben.
Oder fügen Sie es in Cursor Settings → MCP → Add a new MCP server ein:
cursor://anysphere.cursor-deeplink/mcp/install?name=quidli-connect&config=eyJ1cmwiOiJodHRwczovL21jcC5jb25uZWN0LnF1aWQubGkifQ==Manuell hinzufügen {#cursor-manual}
Fügen Sie dies in ~/.cursor/mcp.json (global) oder .cursor/mcp.json (Projekt) unter mcpServers ein – ersetzen Sie Ihre vorhandenen Einträge nicht:
"quidli-connect": {
"url": "https://mcp.connect.quid.li"
}Optional – höhere Limits und Smart Send:
"quidli-connect": {
"url": "https://mcp.connect.quid.li",
"headers": {
"x-api-key": "<your-connect-api-key>"
}
}Claude Desktop
Öffnen Sie Claude → Settings → Connectors (oder auf älteren Versionen Settings → Developer → Edit Config).
Fügen Sie einen eigenen MCP-Connector mit der URL
https://mcp.connect.quid.lihinzu. Optionally the headerx-api-key: <your-connect-api-key>.
Oder fügen Sie das in Ihre Konfigurationsdatei ein und starten Sie Claude neu:
macOS:
~/Library/Application Support/Claude/claude_desktop_config.jsonWindows:
%APPDATA%\Claude\claude_desktop_config.json
{
"mcpServers": {
"quidli-connect": {
"url": "https://mcp.connect.quid.li"
}
}
}Falls Ihre Claude-Version keine entfernten url-Connectors unterstützt, verwenden Sie stattdessen die lokale Bridge (weiterhin gehostete API, mit einem kleinen lokalen Helfer):
{
"mcpServers": {
"quidli-connect": {
"command": "npx",
"args": [
"-y",
"mcp-remote@latest",
"--http",
"https://mcp.connect.quid.li"
]
}
}
}Für die Bridge wird Node.js 20+ benötigt. Starten Sie Claude Desktop nach dem Speichern neu. Sie sollten ein Hammer-Symbol im Chat-Eingabefeld sehen, wenn Tools verfügbar sind.
Ohne Schlüssel sind initialize/tools/list immer erfolgreich. Anonyme tools/call teilen sich ein globales Kontingent (HTTP 429, wenn es erschöpft ist – nutzen Sie für höhere Limits einen Schlüssel). Platzhalter-Schlüssel liefern weiterhin 401.
Lokal (stdio)
Am besten geeignet, wenn Sie Pay-per-Call mit einer Wallet nutzen oder Zugangsdaten lieber in einer lokalen Env-Datei speichern möchten.
Erfordert Node.js 20+.
Cursor
Fügen Sie eines der folgenden zu .cursor/mcp.json (Projekt) oder Ihre globalen MCP-Einstellungen hinzu.
Option A – API-Schlüssel
Gleiches Abrechnungsmodell wie bei Hosted. Die Zugangsdaten bleiben auf Ihrem Rechner.
{
"mcpServers": {
"quidli-connect": {
"command": "npx",
"args": ["-y", "@quidli/connect-mcp"],
"env": {
"CONNECT_API_KEY": "<your-connect-api-key>",
"CONNECT_API_BASE_URL": "https://api.connect.quid.li"
}
}
}
}Option B – x402-Pay-per-Call (Wallet)
Kein API-Schlüssel. Authentifizierte Aufrufe werden automatisch bezahlt, wenn die API HTTP 402 zurückgibt. Ihr privater Wallet-Schlüssel wird nur vom lokalen Prozess gelesen.
{
"mcpServers": {
"quidli-connect": {
"command": "npx",
"args": ["-y", "@quidli/connect-mcp"],
"env": {
"EVM_PRIVATE_KEY": "0x<wallet-with-usdc-on-base>",
"CONNECT_API_BASE_URL": "https://api.connect.quid.li",
"CONNECT_X402_EVM_NETWORK": "8453"
}
}
}
}Verwenden Sie 84532 für Base Sepolia, wenn Sie auf eine Test-API zeigen.
Option C – keine Zugangsdaten (Lookup / Scores / Agent)
Der MCP-Prozess startet ohne CONNECT_API_KEY oder EVM_PRIVATE_KEY. connect_lookup, connect_scores_*, connect_agent_prompt und connect_get_price rufen die API ohne Authentifizierung auf. Das funktioniert, wenn x402 deaktiviert ist (Preis 0, typisch für lokale Umgebungen). In der Produktion mit aktivem x402 liefern diese Tools HTTP 402, bis Sie einen Schlüssel oder eineWallet setzen.
connect_me, connect_drop und connect_drop_balance erfordern weiterhin CONNECT_API_KEY.
{
"mcpServers": {
"quidli-connect": {
"command": "npx",
"args": ["-y", "@quidli/connect-mcp"],
"env": {
"CONNECT_API_BASE_URL": "http://127.0.0.1:3011"
}
}
}
}Claude Desktop
Öffnen Sie Claude → Settings → Developer → Edit Config (aktivieren Sie zuerst den Entwicklermodus, falls Sie ihn nicht sehen).
Fügen Sie eines der folgenden Blöcke unter
mcpServersin einer dieser Dateien ein:
macOS:
~/Library/Application Support/Claude/claude_desktop_config.jsonWindows:
%APPDATA%\Claude\claude_desktop_config.json
Starten Sie Claude Desktop neu.
Option A – API-Schlüssel
{
"mcpServers": {
"quidli-connect": {
"command": "npx",
"args": ["-y", "@quidli/connect-mcp"],
"env": {
"CONNECT_API_KEY": "<your-connect-api-key>",
"CONNECT_API_BASE_URL": "https://api.connect.quid.li"
}
}
}
}Option B – x402-Pay-per-Call (Wallet)
{
"mcpServers": {
"quidli-connect": {
"command": "npx",
"args": ["-y", "@quidli/connect-mcp"],
"env": {
"EVM_PRIVATE_KEY": "0x<wallet-with-usdc-on-base>",
"CONNECT_API_BASE_URL": "https://api.connect.quid.li",
"CONNECT_X402_EVM_NETWORK": "8453"
}
}
}
}Wenn sowohl CONNECT_API_KEY als auch EVM_PRIVATE_KEY gesetzt sind, wird der API-Schlüssel verwendet.
Zugangsdaten sind im lokalen Modus optional. Ohne beide Variablen funktionieren Lookup/Scores/Agent weiterhin, wenn die API kein x402 berechnet. connect_me und Smart-Send-Tools erfordern CONNECT_API_KEY.
Tools
Tool | Funktion |
| Referenzpreise auflisten (ohne Authentifizierung) |
| Soziale Identitäten auf EVM-** und SOL-Wallet-Adressen auflösen |
| Auflisten, welche Plattformen ein Empfänger auf Connect offengelegt hat |
| Batch-Scores für Accounts oder Benutzer:Löschen |
| Scores für ein einzelnes verknüpftes Konto |
| Scores nach Connect-Benutzernamen |
| Profil, Scores und verbundene Accounts des API-Schlüssel-Inhabers — nur TradeSecret API-Schlüssel |
| Smart Send (Batch-Token-Transfer) — nur mit API-Schlüssel |
| Smart-Send-Wallet-Guthaben auf einer Chain — nur mit API-Schlüssel |
| Sprachlicher Agent zum Auffinden von Empfängern |
Bitten Sie Ihren Client, diese Tools zu verwenden, wenn Sie Connect-Daten oder -Aktionen benötigen.
Available Tools
10 toolsconnect_agent_promptA
Natural-language agent turn for Farcaster/Lens cohort discovery. Blocking up to 60s. Omit sessionId to start; include to continue. Do not send requester.
| Name | Required | Description | Default |
|---|---|---|---|
| prompt | Yes | ||
| sessionId | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries the full burden of behavioral disclosure. It discloses the blocking nature ('up to 60s'), the session continuation pattern, and a warning about the requester field. However, it does not mention whether the call has side effects, what the response looks like, or any error conditions. For a tool that likely produces an agent reply, the absence of return semantics is a gap, but the disclosed blocking time and session rules add value, justifying a moderate score.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Three sentences, all substantive. The primary purpose is front-loaded, followed by critical operational details (blocking, session handling, and a prohibition). Every sentence earns its place; there is zero fluff. This is a model of efficient description writing.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a tool with only two parameters, no output schema, and no annotations, the description covers the key usage mechanics but omits return value description and error handling. Since it is an agent turn, the output is likely a natural-language reply, but that is not stated. The blocking time is a valuable detail. It feels adequate but incomplete; the agent would benefit from knowing what the tool returns or whether it can fail. This nudges the score to a 3.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, so the description must explain parameter meaning. The description does this effectively: 'prompt' is implied by 'natural-language agent turn' (the user's message), and 'sessionId' is explicitly explained with start/continue semantics. It even warns about a non-schema 'requester' field. This goes beyond the bare schema and compensates for the lack of schema descriptions, though it could more explicitly name the prompt parameter as the input text.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a specific action: 'Natural-language agent turn for Farcaster/Lens cohort discovery.' This clearly conveys that the tool handles a conversational exchange for cohort discovery on those platforms. It distinguishes itself from siblings like connect_get_price or connect_lookup, which are query tools, by positioning itself as an agent-driven dialogue interface. The verb 'agent turn' is specific and unambiguous.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description gives explicit operational guidance: 'Omit sessionId to start; include to continue' and 'Do not send requester.' This tells the agent exactly how to structure calls across the session lifecycle. It provides clear context on when to use the tool (for natural-language cohort discovery) but does not explicitly mention when to use an alternative, though the sibling naming makes the division obvious. Lacking an explicit 'when-not' clause drops it from a 5 to a 4.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
connect_dropA
Execute a Smart Send (batch token transfer). Returns 201 when submitted or 202 when recipients still processing — retry with same idempotencyKey.
| Name | Required | Description | Default |
|---|---|---|---|
| chainId | Yes | ||
| recipients | Yes | ||
| tokenContract | No | ||
| idempotencyKey | Yes | ||
| ignoreFailedRecipients | No | ||
| amountInWeiPerRecipient | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the behavioral disclosure burden. It discloses that the operation is a write/execution, that results may still be processing (202), and that retries should reuse the idempotencyKey. It does not mention side effects, failure modes, or auth requirements, but the idempotency and async-status traits are valuable.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single dense sentence that front-loads the core purpose and then adds the most important operational details. There is no filler or repetition of the schema.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
The tool has six parameters, nested recipient objects, no annotations, and no output schema. The description explains status codes and idempotent retry but does not clarify required payment fields, chain behavior, token/amount semantics, or failure handling, so an agent lacks enough context to invoke it reliably.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, so the description must compensate for six parameters. It adds semantic insight only for idempotencyKey via the retry note and broadly hints at recipients via 'batch token transfer.' chainId, tokenContract, amountInWeiPerRecipient, and ignoreFailedRecipients remain unexplained, leaving key decision-making to the agent.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the verb and resource: 'Execute a Smart Send (batch token transfer).' It is distinct from the lookup/pricing siblings, though it does not explicitly name or contrast any alternative such as connect_drop_balance.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description establishes the execution context and the idempotency-based retry behavior, but it does not explicitly state when to choose this tool over siblings. The 201/202 statuses and 'retry with same idempotencyKey' provide clear operational guidance.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
connect_drop_balanceA
Get native and ERC-20 balances for the API key owner Smart Send embedded wallet on a chain. Use before connect_drop to verify gas and token funds.
| Name | Required | Description | Default |
|---|---|---|---|
| chainId | Yes | EVM chain ID (Smart Send supported chains only) |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the behavioral disclosure burden. It does communicate that this is a read-only balance check and identifies the wallet scope, but it does not disclose return format, error behavior, permissions, or supported-chain limitations beyond the schema's short note.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two sentences with no filler. The main action is front-loaded, and the usage guidance is tucked into a second sentence. Every word earns its place.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a single-parameter balance-check tool, the description covers what it does, who the wallet belongs to, and why to call it. The absence of an output schema means the return shape is not described, but the simple nature of the tool makes the description adequate for selection and invocation.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100% and the only parameter, chainId, is already described as 'EVM chain ID (Smart Send supported chains only).' The description adds no extra parameter-level detail, so it neither hurts nor improves on the schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description names a specific verb ('Get'), a specific resource ('native and ERC-20 balances'), and a specific scope ('API key owner Smart Send embedded wallet on a chain'). This clearly differentiates it from sibling tools like connect_drop and connect_get_price.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description explicitly says 'Use before connect_drop to verify gas and token funds,' providing clear context for when to invoke it. It does not mention exclusions or alternative balance-related tools, but none are apparent among the siblings, so the guidance is sufficient.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
connect_get_priceA
Get public x402 list prices for lookup, scores, and agent (reference only; live paywall amounts are in 402 responses).
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries the full burden of behavioral disclosure. It adds valuable context: the data is public, reference-only, and not the live paywall amount. This meaningfully communicates the tool's limitations and read-only nature beyond what the name alone would imply.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single, tightly packed sentence. It front-loads the core purpose and then adds the most important caveat ('reference only') and the live-amount distinction, with no redundant words.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a zero-parameter, no-output-schema tool, the description is complete. It tells the agent what is returned, for which contexts, and how it relates to live paywall amounts. Nothing essential is missing for correct invocation.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The tool has zero parameters and the schema is empty with 100% coverage, so there is nothing for the description to document. The baseline for a zero-parameter tool is 4, and no additional parameter explanation is needed.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states a specific action ('Get'), a specific resource ('public x402 list prices'), and the scope ('for lookup, scores, and agent'). It also clarifies that these are reference-only prices, distinguishing the tool from any live paywall price mechanism without needing to compare with siblings.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description gives clear context for when to use the tool: to retrieve reference/list prices. It also explicitly says live amounts are in 402 responses, telling the agent when not to rely on this tool for actual paywall amounts. It does not name a specific sibling alternative, but the 402-response exclusion provides actionable guidance.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
connect_lookupB
Resolve social identities to EVM and Solana wallet addresses. If status is processing, retry the same payload.
| Name | Required | Description | Default |
|---|---|---|---|
| recipients | Yes | Recipients to resolve to EVM/Solana wallets |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries full disclosure burden. It adds a useful retry behavior for a 'processing' status but does not mention whether the operation is read-only, any auth/permission needs, or rate limits. The retry hint is valuable, but coverage is limited.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single concise sentence plus a conditional retry note. It is front-loaded with the core purpose, and every word earns its place with no redundancy.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
The tool is simple with one well-documented parameter. The retry hint implies a status field but does not describe the response format or error cases. For a straightforward lookup, this is reasonably complete given the schema's clarity.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so the schema fully documents the 'recipients' parameter. The description adds minimal meaning beyond restating the resolution purpose, matching the baseline for high coverage.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool resolves social identities to EVM and Solana wallet addresses, a specific verb-resource pair. It does not explicitly differentiate from the sibling connect_lookup_exposed, so it falls short of a perfect 5.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No guidance is given on when to use this tool versus alternatives like connect_lookup_exposed. The retry instruction is behavioral, not a usage selector, so the agent receives no direction on tool choice.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
connect_lookup_exposedA
List platforms a recipient has exposed on Connect, with enriched profile, scores, and wallet addresses. May require x402 payment when the profile owner charges for lookups.
| Name | Required | Description | Default |
|---|---|---|---|
| recipient | Yes | Recipient whose exposed linked accounts and Connect profile should be listed |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the transparency burden. It discloses a significant non-obvious behavior: the lookup may require x402 payment when the profile owner charges. It stops short of detailing payment mechanics or other call behaviors, but the payment warning is valuable.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two sentences with no filler. The purpose is front-loaded and the payment caveat is the only additional sentence, making it easy to scan.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a single-parameter read tool the definition is mostly adequate, but without an output schema or annotations it omits how return values are shaped and how the x402 payment would be triggered. The agent gets enough to understand the purpose, but not full operational context.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The schema already documents the recipient object and its type enum at 100% coverage. The description adds contextual meaning ('platforms a recipient has exposed') but provides no additional semantic detail about how to specify the recipient beyond the schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description opens with the specific verb 'List' and identifies the exact resource: platforms a recipient has exposed on Connect, plus the data returned (profile, scores, wallet addresses). This clearly distinguishes it from general lookup/scores siblings such as connect_lookup and connect_scores_by_account.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description implies the tool is for retrieving exposed-platform and enrichment data, but it never explicitly states when to prefer it over connect_lookup or the connect_scores_* siblings. There are no exclusions or alternative-routing clues beyond the purpose phrase.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
connect_meA
Get the Connect profile, scores, and all linked accounts for the API key owner. Use to identify which user the key belongs to.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the full burden of behavioral disclosure. It clearly indicates a read operation ('Get') but discloses no additional behavioral traits such as authentication requirements, rate limits, or whether data is cached. The description is minimal and does not mention any side effects or limitations, which is a gap given the absence of annotation support.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is two short sentences, front-loaded with the primary action and resource, and the purpose addition is brief and purposeful. Every word earns its place with no fluff or repetition.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a tool with no parameters, no output schema, and a clear read-only purpose, the description covers the essential: what is returned (profile, scores, linked accounts) and when to use it (identify the API key owner). It omits details like response format or pagination, but these are not critical for this simple, targeted tool. Slightly more detail on the nature of the response could push it to 5, but it is adequately complete.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The tool has zero parameters, so the schema provides no parameter descriptions. The baseline for 0 params is 4, and the description correctly does not attempt to fabricate parameter details. It implicitly conveys that no arguments are needed, which is sufficient.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a specific verb ('Get') and clear resource ('Connect profile, scores, and all linked accounts for the API key owner'), and adds the specific purpose of identifying the key owner. This distinguishes it from sibling tools like connect_lookup or connect_scores_by_account, which are likely for other entities.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides clear context: use to identify which user the key belongs to. It implicitly suggests this is the tool when you need the current API key owner's data, but does not explicitly exclude or contrast with sibling tools like connect_lookup or connect_scores_by_username. Good enough for the intended use.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
connect_scores_batchC
Batch scores for linked accounts or Connect usernames. Optional filter excludes users below minScore.
| Name | Required | Description | Default |
|---|---|---|---|
| users | Yes | Users to fetch scores for | |
| filter | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries full responsibility for behavioral disclosure. It does reveal a filtering behavior (excludes users below minScore) and implies a read operation, but it does not state whether the operation is read-only, how it handles invalid or missing users, or any authentication or rate-limiting considerations. This is a significant gap for an unannotated tool.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single sentence that front-loads the primary action ('Batch scores') and then tacks on the filter behavior. It is concise, with no redundant wording, and every part contributes to understanding the tool's purpose.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
The tool has no output schema and no annotations, so the description must convey return format, safety, and usage context. It states only 'scores' without detailing the response structure, what happens when some users are not found, or whether the tool is read-only. This is insufficient for an agent to confidently invoke the tool correctly.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The description adds meaning to the filter parameter by explaining its purpose ('excludes users below minScore'), which is not described in the schema. However, it does not elaborate on the users parameter, which relies on the schema's 'Users to fetch scores for' description. With only 50% schema coverage, the description partially compensates but leaves key structural details (e.g., type field semantics) unexplained.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool batches scores for linked accounts or Connect usernames, providing a specific verb and resource. It does not explicitly differentiate from sibling tools connect_scores_by_account or connect_scores_by_username, though the word 'batch' implies a multi-user scenario, creating some ambiguity.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description offers no guidance on when to use this tool versus the single-account sibling tools. It does not mention conditions like 'use when you have multiple users' or exclusions for single lookups, leaving the agent to infer the intended context from the tool name alone.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
connect_scores_by_accountC
Scores for a linked social account or wallet.
| Name | Required | Description | Default |
|---|---|---|---|
| platform | Yes | ||
| identifier | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description is the sole source of behavioral information. It only provides a noun phrase, omitting side effects, authentication requirements, return format, or error behavior. This is insufficient for an agent to understand the tool's behavior.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single concise sentence with no filler. It states the core idea immediately and is appropriately sized for a simple retrieval tool.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
The tool has no output schema and no annotations, making the description the sole context. It omits return value structure, platform-specific behavior, and differentiation from sibling tools, leaving critical gaps for an agent to invoke it correctly.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The schema has zero property descriptions, and the description does not explain the 'identifier' parameter or its relationship to the 'platform' enum. The phrase 'linked social account or wallet' offers minimal context, leaving the expected identifier format ambiguous.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states the tool returns 'scores for a linked social account or wallet', clearly indicating the resource and an implicit retrieval action. However, it does not explicitly differentiate from sibling tools like connect_scores_by_username, and the meaning of 'scores' remains vague.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No guidance is provided on when to use this tool versus alternatives such as connect_scores_by_username or connect_scores_batch. The description gives no context about selection criteria or when this tool is preferred.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
connect_scores_by_usernameC
Scores by Connect public username.
| Name | Required | Description | Default |
|---|---|---|---|
| username | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full behavioral disclosure burden. It only states the basic purpose and does not mention whether the operation is read-only, what response format to expect, pagination, rate limits, or error handling. This is a significant gap for a tool with no structured behavioral metadata.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single short phrase with no redundant words, effectively front-loading the core resource. It is concise, but its brevity borders on under-specification, eliding useful context an agent could rely on.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple one-parameter tool with no output schema, the description covers the basic function but lacks usage constraints, return value expectations, failure conditions, and alternative routing. An agent has no information about what 'scores' means in the response or how to handle errors, leaving significant gaps.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The schema has one parameter 'username' (string, minLength 1) with 0% description coverage. The description adds the qualifier 'Connect public', which clarifies the username type and distinguishes it from internal or account identifiers. However, it does not explain the expected format, case sensitivity, or relationship to other identifiers, so compensation is partial.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description 'Scores by Connect public username' states the resource (scores) and the key input (username), but omits an explicit verb like 'list' or 'retrieve'. It is distinguishable from sibling tools such as connect_scores_by_account through the 'username' qualifier, though it does not explicitly differentiate. It is clear and resource-focused, but not as specific as it could be.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides no guidance on when to use this tool versus alternatives like connect_scores_batch or connect_scores_by_account. There is no mention of conditions, exclusions, or scenario-based routing, leaving the agent to infer usage purely from the tool name.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
Tool Schema Changelog
Recent tool additions, removals, and schema changes observed during successful MCP inspections.
10 tool updates
v0.5.1- First observed
connect_agent_prompt - First observed
connect_drop - First observed
connect_drop_balance - First observed
connect_get_price - First observed
connect_lookup - First observed
connect_lookup_exposed - First observed
connect_me - First observed
connect_scores_batch - First observed
connect_scores_by_account - First observed
connect_scores_by_username
TDQS
Scored across 10 tools
Tools are largely distinct, but the three score-related tools (connect_scores_batch, connect_scores_by_account, connect_scores_by_username) overlap in purpose, differing mainly by input type. This could cause misselection if an agent doesn't carefully read descriptions. Other tools have clearly separate functions.
Tool names consistently use the 'connect_' prefix and mostly follow a verb_noun pattern (e.g., get_price, lookup, scores_batch, drop_balance). However, 'connect_me' is a plain noun and 'connect_agent_prompt' is noun_noun, deviating slightly from the pattern without causing confusion.
With 10 tools, the server strikes a good balance—enough to cover identity resolution, scoring, token transfers, and agent interactions without overwhelming users. Each tool serves a clear purpose within the server's scope.
The tool set covers core workflows: resolving identities, retrieving scores via multiple input methods, checking balances, executing drops, and agent-driven discovery. No obvious gaps exist for the stated purpose; retries and idempotency are handled via documentation in descriptions.
Maintenance
Related MCP Connectors
The MCP-native bridge to ERC-8004 (on-chain agent identity/reputation/validation): resolve registrat
Signed agent identity, trust scoring, credit economy, and social layer for AI agents.
Resolve @handles to post-quantum-signed agent identities and transact with the brands behind them.
On-chain ERC-8004 agent registry. Search, register, and check reputation across 16 chains.
Related MCP Servers
- FlicenseNot gradedqualityDmaintenanceEnables AI tools to interact with the Lens Protocol decentralized social network ecosystem. Supports fetching profiles, posts, followers, searching content, and accessing social graph data through standardized MCP interfaces.4-
- AlicenseNot gradedqualityCmaintenanceEnables AI agents to discover and interact with onchain agent infrastructure on Base, including identity, micropayments, and tool capabilities via MCP.4MIT
- AlicenseNot gradedqualityBmaintenanceEnables any MCP-compatible LLM client to autonomously hold, spend, earn, and receive cryptocurrency using native MCP tools, no code required.3 npm80ISC

@agentgram/mcp-serverofficial
AlicenseAqualityCmaintenanceEnables AI agents to interact with AgentGram, the social network for AI agents, through native MCP tools for posting, commenting, voting, and managing identity.2217 npm1MIT