Skip to main content
Glama

mcp-server-cloudflare

Official
by cloudflare
account.tools.ts2.82 kB
import { z } from 'zod' import { handleAccountsList } from '../api/account.api' import { getCloudflareClient } from '../cloudflare-api' import { getProps } from '../get-props' import type { CloudflareMcpAgent } from '../types/cloudflare-mcp-agent.types' export function registerAccountTools(agent: CloudflareMcpAgent) { // Tool to list all accounts agent.server.tool( 'accounts_list', 'List all accounts in your Cloudflare account', {}, { title: 'List accounts', annotations: { readOnlyHint: true, }, }, async () => { try { const props = getProps(agent) const results = await handleAccountsList({ client: getCloudflareClient(props.accessToken), }) // Sort accounts by created_on date (newest first) const accounts = results // order by created_on desc ( newest first ) .sort((a, b) => { if (!a.created_on) return 1 if (!b.created_on) return -1 return new Date(b.created_on).getTime() - new Date(a.created_on).getTime() }) // Remove fields not needed by the LLM .map((account) => { return { id: account.id, name: account.name, created_on: account.created_on, } }) return { content: [ { type: 'text', text: JSON.stringify({ accounts, count: accounts.length, }), }, ], } } catch (e) { agent.server.recordError(e) return { content: [ { type: 'text', text: `Error listing accounts: ${e instanceof Error && e.message}`, }, ], } } } ) // Only register set_active_account tool when user token is provided, as it doesn't make sense to expose // this tool for account scoped tokens, given that they're scoped to a single account if (getProps(agent).type === 'user_token') { const activeAccountIdParam = z .string() .describe( 'The accountId present in the users Cloudflare account, that should be the active accountId.' ) agent.server.tool( 'set_active_account', 'Set active account to be used for tool calls that require accountId', { activeAccountIdParam, }, { title: 'Set active account', annotations: { readOnlyHint: false, destructiveHint: false, }, }, async (params) => { try { const { activeAccountIdParam: activeAccountId } = params await agent.setActiveAccountId(activeAccountId) return { content: [ { type: 'text', text: JSON.stringify({ activeAccountId, }), }, ], } } catch (e) { agent.server.recordError(e) return { content: [ { type: 'text', text: `Error setting activeAccountID: ${e instanceof Error && e.message}`, }, ], } } } ) } }

MCP directory API

We provide all the information about MCP servers via our MCP API.

curl -X GET 'https://glama.ai/api/mcp/v1/servers/cloudflare/mcp-server-cloudflare'

If you have feedback or need assistance with the MCP directory API, please join our Discord server