Identity
Who am I
Your identity, tier, key label and rate-limit window over MCP with plungeai_whoami.
Available now over MCP; a REST route is tracked as TI-79.
Read the identity behind your key: the user, the auth type and tier, the key label and id, and the current rate-limit window. It is the plungeai_whoami tool of the MCP server, so any MCP client can call it, and it is read-only.
Endpoint
POST https://mcp.plungeai.com/v1 · tools/call · name: plungeai_whoamiAuthorizations
Authorization: Bearer $PLUNGE_API_KEY or X-API-Key: $PLUNGE_API_KEY, an ozk_ key from Dashboard → One API → Keys. The call counts toward your rate limit, so the window it reports includes it.
Arguments
The user's words, up to 4,000 characters. Optional.
markdown or json. json returns the fields below as a JSON document and as structuredContent.
Default: markdown
Output
With format: "markdown" (the default) the text starts with # Who am I and lists User, Auth (type and tier), Key (label and key id), Rate window (<n>/min used · <n>/day used, left out when the counter cannot be read) and Server. With format: "json":
Your user id.
How the request authenticated, api-key for an ozk_ key.
The key's tier: free, pro or enterprise, or null when the key carries none.
The name you gave the key in the Dashboard, or null when it has none.
The key's id, or null when it is not known.
{ "minute_used", "day_used" } for the current windows, or null when the counter cannot be read.
The server name and host, plungeai.com (mcp.plungeai.com).
Example
import json, os, requests
r = requests.post(
"https://mcp.plungeai.com/v1",
headers={
"Authorization": f"Bearer {os.environ['PLUNGE_API_KEY']}",
"Content-Type": "application/json",
"Accept": "application/json, text/event-stream",
},
json={"jsonrpc": "2.0", "id": 1, "method": "tools/call", "params": {"name": "plungeai_whoami", "arguments": {"user_request": "who am I?", "format": "json"}}},
)
frames = [line[len("data: "):] for line in r.text.splitlines() if line.startswith("data: ")]
print(json.loads(frames[-1])["result"]["structuredContent"])import { Client } from '@modelcontextprotocol/sdk/client/index.js'
import { StreamableHTTPClientTransport } from '@modelcontextprotocol/sdk/client/streamableHttp.js'
const transport = new StreamableHTTPClientTransport(new URL('https://mcp.plungeai.com/v1'), {
requestInit: { headers: { Authorization: `Bearer ${process.env.PLUNGE_API_KEY}` } },
})
const client = new Client({ name: 'whoami-example', version: '1.0.0' })
await client.connect(transport)
const result = await client.callTool({ name: 'plungeai_whoami', arguments: { user_request: 'who am I?' } })
console.log(result.content)curl -s https://mcp.plungeai.com/v1 \
-H "Authorization: Bearer $PLUNGE_API_KEY" \
-H 'Content-Type: application/json' \
-H 'Accept: application/json, text/event-stream' \
-d '{"jsonrpc":"2.0","id":1,"method":"tools/call","params":{"name":"plungeai_whoami","arguments":{"user_request":"who am I?"}}}'Result shape, Markdown form (the field layout of the tool reference; every value is a placeholder):
# Who am I
- **User:** `00000000-0000-4000-8000-000000000005`
- **Auth:** api-key · tier **free**
- **Key:** my-laptop (`00000000-0000-4000-8000-000000000008`)
- **Rate window:** 1/min used · 12/day used
- **Server:** plungeai.com (mcp.plungeai.com)Result shape, JSON form (format: "json", the structuredContent; every value is a placeholder):
{
"user": "00000000-0000-4000-8000-000000000005",
"auth_type": "api-key",
"tier": "free",
"key_label": "my-laptop",
"key_id": "00000000-0000-4000-8000-000000000008",
"rate_window": { "minute_used": 1, "day_used": 12 },
"server": "plungeai.com (mcp.plungeai.com)"
}The same tool is documented field by field on plungeai_whoami.