discourse_get_user
Retrieve basic user information from Discourse forums by providing a username. This tool enables AI agents to access user data for forum interaction and management.
Instructions
Get basic user info.
Input Schema
TableJSON Schema
| Name | Required | Description | Default |
|---|---|---|---|
| username | Yes |
Implementation Reference
- src/tools/builtin/get_user.ts:16-37 (handler)The handler function that fetches user information from the Discourse API using the provided username, extracts relevant details like name, trust level, join date, bio, and profile link, formats them into a text response, and handles errors by returning an error message.async ({ username }, _extra: any) => { try { const { base, client } = ctx.siteState.ensureSelectedSite(); const data = (await client.get(`/u/${encodeURIComponent(username)}.json`)) as any; const user = data?.user || data?.user_badges || data; const name = user?.name || username; const trust = user?.trust_level; const created = user?.created_at || user?.user?.created_at || ""; const bio = user?.bio_raw || ""; const lines = [ `@${username} (${name})`, trust != null ? `Trust level: ${trust}` : undefined, created ? `Joined: ${created}` : undefined, bio ? "" : undefined, bio ? bio.slice(0, 1000) : undefined, `Profile: ${base}/u/${encodeURIComponent(username)}`, ].filter(Boolean) as string[]; return { content: [{ type: "text", text: lines.join("\n") }] }; } catch (e: any) { return { content: [{ type: "text", text: `Failed to get user ${username}: ${e?.message || String(e)}` }], isError: true }; } }
- src/tools/builtin/get_user.ts:5-7 (schema)Zod schema defining the input as an object with a required 'username' string parameter (minimum length 1).const schema = z.object({ username: z.string().min(1), });
- src/tools/builtin/get_user.ts:9-38 (registration)Registers the 'discourse_get_user' tool on the server, providing the tool name, metadata (title, description), input schema, and the handler function.server.registerTool( "discourse_get_user", { title: "Get User", description: "Get basic user info.", inputSchema: schema.shape, }, async ({ username }, _extra: any) => { try { const { base, client } = ctx.siteState.ensureSelectedSite(); const data = (await client.get(`/u/${encodeURIComponent(username)}.json`)) as any; const user = data?.user || data?.user_badges || data; const name = user?.name || username; const trust = user?.trust_level; const created = user?.created_at || user?.user?.created_at || ""; const bio = user?.bio_raw || ""; const lines = [ `@${username} (${name})`, trust != null ? `Trust level: ${trust}` : undefined, created ? `Joined: ${created}` : undefined, bio ? "" : undefined, bio ? bio.slice(0, 1000) : undefined, `Profile: ${base}/u/${encodeURIComponent(username)}`, ].filter(Boolean) as string[]; return { content: [{ type: "text", text: lines.join("\n") }] }; } catch (e: any) { return { content: [{ type: "text", text: `Failed to get user ${username}: ${e?.message || String(e)}` }], isError: true }; } } );