Skip to main content
Glama

Tips for using this MCP server

tips

Provides actionable recommendations to enhance your device's performance while navigating Map Traveler MCP's virtual journeys on Google Maps.

Instructions

Inform you of recommended actions for your device

Input Schema

TableJSON Schema
NameRequiredDescriptionDefault

No arguments

Implementation Reference

  • The primary handler for the MCP 'tips' tool. It invokes StoryService.tips(), joins the text list, and attaches images as base64 if available, returning formatted tool content.
    const tips = () => {
      return Effect.gen(function* () {
          const res = yield* StoryService.tips()
          const content = [{type: "text", text: res.textList.join('\n-------\n')} as ToolContentResponse]
          if (res.imagePathList.length > 0) {
            yield* Effect.forEach(res.imagePathList, a => {
              return Effect.async<Buffer, Error>((resume) => fs.readFile(path.join(__pwd, a), (err, data) => {
                if (err) {
                  resume(Effect.fail(err))
                }
                resume(Effect.succeed(data));
              })).pipe(Effect.andThen(b => {
                content.push({
                  type: "image",
                  data: Buffer.from(b).toString('base64'),
                  mimeType: 'image/png'
                } as ToolContentResponse)
              }))
            })
          }
          return content
        }
      )
    }
  • Core logic generating tips text based on system configuration (practice mode, db setup, API keys, Python/rembg, SNS accounts, etc.). Returns textList and imagePathList.
        const tips = () => {
          //  informationの文
          //  1. practiceモードであればそれを示す 解除にはGoogle map api keyが必要であることを示す
          //  2. dbパスを設定するとアプリを終了しても現在地と行き先が記録されることを示す
          //  2. 画像AIのkeyがなければ 画像API keyがあればアバターの姿を任意に作れることを示す
          //  3. pythonがインストールされていなければ pythonをインストールするとアバターの姿を合成できる
          //
          //  以下はランダムで表示
          //  - 画像AIのkeyがあってかつpromptを変更したことがなければ変更可能を案内する
          //  - snsアカウントがあればpostが出来ることを案内する
          //  - bsアカウントがあれば相互対話が出来ることを案内する
          //  - 二人称モードに切り替えると二人称会話で操作できる(ただし可能な限り)
          //  - リソースに詳細があるのでリソースを取り込むと話やすい。プロジェクトを起こしてある程度会話を調整できる
          return Effect.gen(function *() {
            const textList: string[] = []
            const imagePathList: string[] = []
            const runnerEnv = yield *DbService.getSysEnv()
            if (runnerEnv.mode.isPractice) {
              textList.push('Currently in practice mode. You can only go to fixed locations.' +
                ' To switch to normal mode, you need to obtain and set a Google Map API key.' +
                ' key for detail: https://developers.google.com/maps/documentation/streetview/get-api-key ' +
                ' Need Credentials: [Street View Static API],[Places API (New)],[Time Zone API],[Directions API]' +
                ' Please specify the API key in the configuration file(claude_desktop_config.json).' +
                ' And restart app. Claude Desktop App. Claude App may shrink into the taskbar, so please quit it completely.\n' +
                `claude_desktop_config.json\n
    \`\`\`
    "env":{"GoogleMapApi_key":"xxxxxxx"}
    \`\`\`
    `
              )
            } else {
              if (runnerEnv.mode.dbMode === "memory") {
                textList.push('Since the database is not currently set, the configuration information will be lost when you exit.' +
                  ' Please specify the path of the saved database file in the configuration file(claude_desktop_config.json).' +
                  `claude_desktop_config.json\n
    \`\`\`
    "env":{"sqlite_path":"%USERPROFILE%/Desktop/traveler.sqlite"}
    \`\`\`
    Or set a db connection. Please refer to README.md.`
                )
              } else {
                if (!runnerEnv.useAiImageGen) {
                  textList.push('If you want to synthesize an avatar image, you will need a key for the image generation AI.' +
                    ' Currently, PixAi and Stability AI\'s SDXL 1.0 API are supported.' +
                    ' Please refer to the website of each company to obtain an API key.' +
                    ' https://platform.stability.ai/docs/getting-started https://platform.stability.ai/account/keys ' +
                    ' https://pixai.art/ https://platform.pixai.art/docs/getting-started/00---quickstart/ ' +
                    ' Please specify the API key in the configuration file(claude_desktop_config.json).' +
                    `claude_desktop_config.json\n
    \`\`\`
    "env":{"pixAi_key":"xyzxyz"}
    or
    "env":{"sd_key":"xyzxyz"}
    \`\`\`
    `
                  )
                }
                const enableRembg = yield *ImageService.isEnableRembg(runnerEnv)
                if (!enableRembg) {
                  textList.push('In order to synthesize avatar images, your PC must be running Python and install rembg.' +
                    ` Please install Python and rembg on your PC using information from the Internet.\n
    \`\`\`
    "env":{"rembgPath":"(absolute path to rembg cli)"}
    \`\`\`\n
    or 
    \`\`\`
    "env":{"rembgUrl":"(rembg service API url)"}
    \`\`\`\n
    
    To keep your pc environment clean, I recommend using a Python virtual environment such as venv.
    Or set a Rembg API, Please refer to README.md.`)
                }
                //  基本動作状態
                const bsEnable = runnerEnv.bs_id && runnerEnv.bs_pass && runnerEnv.bs_handle
                if (!bsEnable) {
                  textList.push('Optional: Set up a Bluesky SNS account\n' +
                    'By setting your registered address, password, and handle for Bluesky SNS, you can post travel information on the SNS and obtain and interact with other people\'s travel information.\n' +
                    'Since articles may be posted automatically, we strongly recommend using a dedicated account.\n' +
                    `claude_desktop_config.json\n
    \`\`\`
    "env":{
    "bs_id":"xxxx",
    "bs_pass":"yyyyy",
    "bs_handle":"zzzz"
    }
    \`\`\`
    `
                  )
                } else {
                  if (runnerEnv.extfeedTag && !runnerEnv.isEnableFeedTag) {
                    textList.push('I detected an external feed tag "MT_FEED_TAG", but it was not used. external feed tags must start with a # and be at least 15 characters long.\n')
                  }
                }
                if (!runnerEnv.mode.promptChanged && !runnerEnv.mode.fixedModelPrompt) {
                  textList.push('You can change the appearance of your avatar by directly telling the AI what you want it to look like, or by specifying a prompt to show its appearance with set_avatar_prompt.\n')
                }
                textList.push('You can play a tiny role play game using the scenario in carBattle.txt. Have fun!')
              }
            }
    
            return {
                textList,
                imagePathList
              }
          })
        }
  • Tool schema definition: no input parameters required, provides title and description.
    name: "tips",  //  pythonがあったらよいとか、db設定がよいとか、tipsを取得する。tipsの取得を行うのはproject側スクリプトとか、script batchとか
    title: "Tips for using this MCP server",
    description: "Inform you of recommended actions for your device",
    inputSchema: {
      type: "object",
      properties: {}
    }
  • Registers the handler in the tool switch statement for dispatching 'tips' calls.
    case "tips":
      return tips()
  • Registers the dynamic tools list handler, which includes the 'tips' tool via makeToolsDef.
    server.setRequestHandler(ListToolsRequestSchema, async () => {
      return await DbService.getSysMode().pipe(Effect.andThen(env => makeToolsDef(env)),
        aiRuntime.runPromise
      )
    });
Behavior2/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

No annotations are provided, so the description carries the full burden of behavioral disclosure. It states the tool 'Inform you' but doesn't clarify whether this is a read-only operation, if it requires permissions, how recommendations are generated, or what the output format might be. For a tool with zero annotation coverage, this leaves significant gaps in understanding its behavior and safety profile.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is a single, efficient sentence that directly states the tool's function without unnecessary words. It's front-loaded with the core purpose ('Inform you of recommended actions'), making it easy to parse. However, it could be slightly more specific to improve clarity without sacrificing brevity.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness2/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given the tool's complexity (simple informational tool with no parameters) and the lack of annotations and output schema, the description is incomplete. It doesn't explain what 'recommended actions' entail, how they're determined, or what the return value looks like. For a tool that might provide actionable advice, more context is needed to guide the agent effectively.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The tool has 0 parameters, and schema description coverage is 100%, so there are no parameters to document. The description doesn't need to add parameter semantics beyond what the schema provides. A baseline score of 4 is appropriate as the description doesn't contradict the empty schema and the lack of parameters is handled adequately by the structured data.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose3/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description states the tool's purpose as informing about recommended actions for a device, which is clear but vague. It uses a specific verb ('Inform') and resource ('recommended actions for your device'), but doesn't distinguish this from sibling tools like 'get_setting' or 'get_traveler_info' that might also provide device-related information. The purpose is understandable but lacks specificity about what types of recommendations or actions are involved.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description provides no guidance on when to use this tool versus alternatives. With sibling tools like 'get_setting' or 'get_traveler_info' that might retrieve device information, there's no indication of when 'tips' is appropriate—e.g., for proactive advice versus status queries. Usage is implied as informational but without explicit context or exclusions, leaving the agent to guess based on the tool name alone.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

Install Server

Other Tools

Related Tools

Latest Blog Posts

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/mfukushim/map-traveler-mcp'

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