@@ -19,14 +19,6 @@ const { dirname, join } = path;
1919const LOCAL_BINARY_NAME = "iterable-mcp" ;
2020const NPX_PACKAGE_NAME = "@iterable/mcp" ;
2121
22- // Tool display names
23- const TOOL_NAMES = {
24- cursor : "Cursor" ,
25- "claude-desktop" : "Claude Desktop" ,
26- "claude-code" : "Claude Code" ,
27- manual : "Manual Setup" ,
28- } as const ;
29-
3022// Get package version
3123const packageJson = JSON . parse (
3224 readFileSync (
@@ -35,6 +27,17 @@ const packageJson = JSON.parse(
3527 )
3628) as { version : string } ;
3729
30+ // Tool display names
31+ type ToolName = keyof typeof TOOL_NAMES ;
32+ const TOOL_NAMES = {
33+ cursor : "Cursor" ,
34+ "claude-desktop" : "Claude Desktop" ,
35+ "claude-code" : "Claude Code" ,
36+ "gemini-cli" : "Gemini CLI" ,
37+ manual : "Manual Setup" ,
38+ } as const ;
39+
40+ type FileBasedToolName = keyof typeof TOOL_CONFIGS ;
3841const TOOL_CONFIGS = {
3942 "claude-desktop" : ( ( ) => {
4043 switch ( process . platform ) {
@@ -61,7 +64,8 @@ const TOOL_CONFIGS = {
6164 }
6265 } ) ( ) ,
6366 cursor : path . join ( os . homedir ( ) , ".cursor" , "mcp.json" ) ,
64- } as const ;
67+ "gemini-cli" : path . join ( os . homedir ( ) , ".gemini" , "settings.json" ) ,
68+ } as const satisfies Record < string , string > ;
6569
6670const execFileAsync = promisify ( execFile ) ;
6771
@@ -221,10 +225,11 @@ export const setupMcpServer = async (): Promise<void> => {
221225 const showHelp = args . includes ( "--help" ) || args . includes ( "-h" ) ;
222226 const advanced = args . includes ( "--advanced" ) ;
223227 const autoUpdate = args . includes ( "--auto-update" ) ;
224- let tools = [
228+ let tools : ToolName [ ] = [
225229 ...( args . includes ( "--claude-desktop" ) ? [ "claude-desktop" as const ] : [ ] ) ,
226230 ...( args . includes ( "--cursor" ) ? [ "cursor" as const ] : [ ] ) ,
227231 ...( args . includes ( "--claude-code" ) ? [ "claude-code" as const ] : [ ] ) ,
232+ ...( args . includes ( "--gemini-cli" ) ? [ "gemini-cli" as const ] : [ ] ) ,
228233 ...( args . includes ( "--manual" ) ? [ "manual" as const ] : [ ] ) ,
229234 ] ;
230235
@@ -254,6 +259,7 @@ export const setupMcpServer = async (): Promise<void> => {
254259 [ `${ commandName } setup --claude-desktop` , "Configure for Claude Desktop" ] ,
255260 [ `${ commandName } setup --cursor` , "Configure for Cursor" ] ,
256261 [ `${ commandName } setup --claude-code` , "Configure for Claude Code" ] ,
262+ [ `${ commandName } setup --gemini-cli` , "Configure for Gemini CLI" ] ,
257263 [ `${ commandName } setup --manual` , "Show manual config instructions" ] ,
258264 [
259265 `${ commandName } setup --cursor --claude-desktop` ,
@@ -359,9 +365,7 @@ export const setupMcpServer = async (): Promise<void> => {
359365 showIterableLogo ( packageJson . version ) ;
360366
361367 const { selectedTools } = await inquirer . prompt < {
362- selectedTools : Array <
363- "cursor" | "claude-desktop" | "claude-code" | "manual"
364- > ;
368+ selectedTools : ToolName [ ] ;
365369 } > ( [
366370 {
367371 type : "checkbox" ,
@@ -371,6 +375,7 @@ export const setupMcpServer = async (): Promise<void> => {
371375 { name : "Cursor" , value : "cursor" } ,
372376 { name : "Claude Desktop" , value : "claude-desktop" } ,
373377 { name : "Claude Code (CLI)" , value : "claude-code" } ,
378+ { name : "Gemini CLI" , value : "gemini-cli" } ,
374379 { name : "Other / Manual Setup" , value : "manual" } ,
375380 ] ,
376381 validate : ( arr : any ) =>
@@ -898,17 +903,16 @@ export const setupMcpServer = async (): Promise<void> => {
898903 }
899904
900905 const fileBasedTools = tools . filter (
901- ( tool ) => tool === "claude-desktop" || tool === "cursor"
902- ) as Array < "claude-desktop" | "cursor" > ;
906+ ( tool ) : tool is FileBasedToolName => tool in TOOL_CONFIGS
907+ ) ;
903908 const needsClaudeCode = tools . includes ( "claude-code" ) ;
904909 const needsManual = tools . includes ( "manual" ) ;
905910
906911 if ( fileBasedTools . length > 0 ) {
907912 const { updateToolConfig } = await import ( "./utils/tool-config.js" ) ;
908913 for ( const tool of fileBasedTools ) {
909914 const configPath = TOOL_CONFIGS [ tool ] ;
910- const toolName =
911- tool === "claude-desktop" ? "Claude Desktop" : "Cursor" ;
915+ const toolName = TOOL_NAMES [ tool ] ;
912916 spinner . start ( `Configuring ${ toolName } ...` ) ;
913917 try {
914918 await updateToolConfig ( configPath , iterableMcpConfig ) ;
@@ -1004,6 +1008,8 @@ export const setupMcpServer = async (): Promise<void> => {
10041008 if ( fileBasedTools . includes ( "cursor" ) ) configuredTools . push ( "Cursor" ) ;
10051009 if ( fileBasedTools . includes ( "claude-desktop" ) )
10061010 configuredTools . push ( "Claude Desktop" ) ;
1011+ if ( fileBasedTools . includes ( "gemini-cli" ) )
1012+ configuredTools . push ( "Gemini CLI" ) ;
10071013 if ( needsClaudeCode ) configuredTools . push ( "Claude Code" ) ;
10081014 if ( needsManual ) configuredTools . push ( "your AI tool" ) ;
10091015
0 commit comments