@@ -5,63 +5,79 @@ import { getCloudflareClient } from '@repo/mcp-common/src/cloudflare-api'
55import type { AccountManagementMCP } from '../index'
66
77export function registerAccountManagementTools ( agent : AccountManagementMCP ) {
8- agent . server . tool ( 'get_members_in_account' , 'Get members in account' , { } , async ( ) => {
9- const accountId = await agent . getActiveAccountId ( )
10- if ( ! accountId ) {
11- return {
12- content : [
13- {
14- type : 'text' ,
15- text : 'No currently active accountId. Try listing your accounts (accounts_list) and then setting an active account (set_active_account)' ,
16- } ,
17- ] ,
8+ agent . server . tool (
9+ 'get_members_in_account' ,
10+ 'Get members in a Cloudflare account' ,
11+ {
12+ page : z . number ( ) . min ( 1 ) . default ( 1 ) ,
13+ per_page : z . number ( ) . min ( 1 ) . max ( 100 ) . default ( 20 ) ,
14+ } ,
15+ async ( params ) => {
16+ const accountId = await agent . getActiveAccountId ( )
17+ if ( ! accountId ) {
18+ return {
19+ content : [
20+ {
21+ type : 'text' ,
22+ text : 'No currently active accountId. Try listing your accounts (accounts_list) and then setting an active account (set_active_account)' ,
23+ } ,
24+ ] ,
25+ }
1826 }
19- }
20- try {
21- const client = getCloudflareClient ( agent . props . accessToken )
22- const r = await client . accounts . members . list ( {
23- account_id : accountId ,
24- } )
27+ try {
28+ const client = getCloudflareClient ( agent . props . accessToken )
29+ const r = await client . accounts . members . list ( {
30+ account_id : accountId ,
31+ page : params . page ,
32+ per_page : params . per_page ,
33+ } )
34+
35+ const { result } = r
2536
26- const { result } = r
37+ // From results array return the user id, name, and roles array
38+ // We should not return their email as it is sensitive information
39+ const members = result . map ( ( member ) => {
40+ return {
41+ id : member . user ?. id ,
42+ name : member . user ?. first_name + ' ' + member . user ?. last_name ,
43+ roles : member . roles ,
44+ policies : member . policies ,
45+ status : member . status ,
46+ }
47+ } )
2748
28- // From results array return the user id, name, and roles array
29- // We should not return their email as it is sensitive information
30- const members = result . map ( ( member ) => {
3149 return {
32- id : member . user ?. id ,
33- name : member . user ?. first_name + ' ' + member . user ?. last_name ,
34- roles : member . roles ,
35- policies : member . policies ,
36- status : member . status ,
50+ content : [
51+ {
52+ type : 'text' ,
53+ text : JSON . stringify ( {
54+ result : members ,
55+ result_info : r . result_info ,
56+ page_info : {
57+ page : params . page ,
58+ per_page : params . per_page ,
59+ has_more : members . length === params . per_page ,
60+ } ,
61+ } ) ,
62+ } ,
63+ ] ,
64+ }
65+ } catch ( error ) {
66+ return {
67+ content : [
68+ {
69+ type : 'text' ,
70+ text : `Error getting members in account: ${ error instanceof Error && error . message } ` ,
71+ } ,
72+ ] ,
3773 }
38- } )
39-
40- return {
41- content : [
42- {
43- type : 'text' ,
44- text : JSON . stringify ( {
45- result : members ,
46- } ) ,
47- } ,
48- ] ,
49- }
50- } catch ( error ) {
51- return {
52- content : [
53- {
54- type : 'text' ,
55- text : `Error getting members in account: ${ error instanceof Error && error . message } ` ,
56- } ,
57- ] ,
5874 }
5975 }
60- } )
76+ )
6177
6278 agent . server . tool (
6379 'get_roles' ,
64- 'List all the available roles' ,
80+ 'List all the available roles in a Cloudflare account ' ,
6581 {
6682 page : z . number ( ) . min ( 1 ) . default ( 1 ) ,
6783 per_page : z . number ( ) . min ( 1 ) . max ( 100 ) . default ( 20 ) ,
@@ -116,10 +132,13 @@ export function registerAccountManagementTools(agent: AccountManagementMCP) {
116132
117133 agent . server . tool (
118134 'invite_to_account' ,
119- 'Invite a user to an account with at least one role. The role is an array with the value set as the ID of that role.' ,
135+ 'Invite a user to a Cloudflare account with at least one role.' ,
120136 {
121137 email : z . string ( ) . email ( ) ,
122- roles : z . array ( z . string ( ) ) ,
138+ roles : z
139+ . array ( z . string ( ) )
140+ . min ( 1 )
141+ . describe ( 'Array of role IDs. You can get the roles by using the get_roles tool.' ) ,
123142 } ,
124143 async ( params ) => {
125144 const accountId = await agent . getActiveAccountId ( )
@@ -173,7 +192,7 @@ export function registerAccountManagementTools(agent: AccountManagementMCP) {
173192
174193 agent . server . tool (
175194 'update_member' ,
176- 'Update a member in an account' ,
195+ 'Update a member in a Cloudflare account' ,
177196 {
178197 member_id : z . string ( ) ,
179198 roles : z . array ( z . string ( ) ) ,
@@ -226,7 +245,7 @@ export function registerAccountManagementTools(agent: AccountManagementMCP) {
226245
227246 agent . server . tool (
228247 'remove_member' ,
229- 'Remove a member from an account' ,
248+ 'Remove a member from a Cloudflare account' ,
230249 {
231250 member_id : z . string ( ) ,
232251 } ,
0 commit comments