Skip to main content
Glama
yfmeii

WeChat Mini Program Dev MCP

by yfmeii

mp_navigate

Navigate within a WeChat mini program using supported methods: navigateTo, redirectTo, reLaunch, switchTab, and navigateBack.

Instructions

在小程序内导航,支持 navigateTo、redirectTo、reLaunch、switchTab 和 navigateBack。

Input Schema

TableJSON Schema
NameRequiredDescriptionDefault
connectionNo
pathNo
queryNo
transitionNonavigateTo
waitMsNo

Implementation Reference

  • The 'mp_navigate' tool handler function that executes navigation logic (navigateTo, redirectTo, reLaunch, switchTab, navigateBack) using WeappAutomatorManager. It dispatches the correct navigation method based on the 'transition' parameter, optionally waits, and returns the active page info.
    function createNavigateTool(manager: WeappAutomatorManager): AnyTool {
      return {
        name: "mp_navigate",
        description:
          "在小程序内导航,支持 navigateTo、redirectTo、reLaunch、switchTab 和 navigateBack。",
        parameters: navigateParameters,
        execute: async (rawArgs, context: ToolContext) =>
          withUserErrorResult(async () => {
          const args = navigateParameters.parse(rawArgs ?? {});
          const transition = args.transition ?? "navigateTo";
          const overrides = args.connection;
          const waitMs = args.waitMs;
          const providedPath = args.path;
    
          return manager.withMiniProgram<ContentResult>(
            context.log,
            { overrides },
            async (miniProgram) => {
              let url: string | undefined;
              let page;
    
              if (transition === "navigateBack") {
                page = await miniProgram.navigateBack();
              } else {
                if (!providedPath) {
                  return toErrorResult(
                    "参数 path 是必需的,除非 transition 是 navigateBack。"
                  );
                }
                url = buildUrl(providedPath, args.query);
                switch (transition) {
                  case "navigateTo":
                    page = await miniProgram.navigateTo(url);
                    break;
                  case "redirectTo":
                    page = await miniProgram.redirectTo(url);
                    break;
                  case "reLaunch":
                    page = await miniProgram.reLaunch(url);
                    break;
                  case "switchTab":
                    page = await miniProgram.switchTab(url);
                    break;
                  default:
                    return toErrorResult(`不支持的 transition: ${transition}`);
                }
              }
    
              if (waitMs && page) {
                await page.waitFor(waitMs);
              }
    
              const activePage = page ?? (await miniProgram.currentPage());
    
              return toTextResult(
                formatJson({
                  transition,
                  url,
                  activePage: activePage
                    ? { path: activePage.path, query: activePage.query }
                    : null,
                })
              );
            }
          );
          }),
      };
  • Zod schema definition for 'mp_navigate' parameters: optional path, optional query record, transition enum (navigateTo/redirectTo/reLaunch/switchTab/navigateBack, default navigateTo), optional waitMs (non-negative int), and connection overrides.
    const navigateParameters = connectionContainerSchema
      .extend({
        path: z.string().trim().min(1).optional(),
        query: querySchema,
        transition: z
          .enum([
            "navigateTo",
            "redirectTo",
            "reLaunch",
            "switchTab",
            "navigateBack",
          ])
          .default("navigateTo"),
        waitMs: z.coerce.number().int().nonnegative().optional(),
      });
  • The tool is registered by calling createNavigateTool(manager) inside createApplicationTools(), which returns an array of all application tools. This is the central registration point.
    export function createApplicationTools(
      manager: WeappAutomatorManager
    ): AnyTool[] {
      return [
        createEnsureConnectionTool(manager),
        createNavigateTool(manager),
        createScreenshotTool(manager),
        createCallWxMethodTool(manager),
        createGetConsoleLogsTool(manager),
        createCurrentPageTool(manager),
        createListProjectsTool(manager),
        createSetDefaultProjectTool(manager),
      ];
  • The buildUrl helper function constructs a URL from a path and optional query parameters. Used by the navigate tool to build the navigation URL.
    export function buildUrl(
      path: string,
      query?: Record<string, string>
    ): string {
      const normalizedPath = path.startsWith("/") ? path : `/${path}`;
    
      if (!query || Object.keys(query).length === 0) {
        return normalizedPath;
      }
      const searchParams = new URLSearchParams(query);
      const separator = normalizedPath.includes("?") ? "&" : "?";
      const search = searchParams.toString();
      return search ? `${normalizedPath}${separator}${search}` : normalizedPath;
    }
  • src/tools.ts:7-13 (registration)
    Top-level registration: createTools() calls createApplicationTools(manager) which includes the mp_navigate tool.
    export function createTools(manager: WeappAutomatorManager): AnyTool[] {
      return [
        ...createApplicationTools(manager),
        ...createPageTools(manager),
        ...createElementTools(manager),
      ];
    }
Behavior2/5

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

With no annotations, the description should disclose behavioral traits. It only lists navigation types but omits side effects, failure modes, or required permissions. The agent is not informed about potentially destructive actions like reLaunch or switchTab.

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

Conciseness3/5

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

The description is brief (one sentence) but fails to balance conciseness with informativeness. While it avoids verbosity, it lacks critical details, making it under-specified rather than efficiently concise.

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

Completeness1/5

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

Given the tool's complexity (5 parameters including a nested connection object with 15 subfields) and no output schema, the description is severely incomplete. It does not explain the connection parameter, which is essential for navigation, nor does it describe the behavior of waitMs or return values.

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

Parameters1/5

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

Schema description coverage is 0%, and the description provides no explanations for parameters like path, query, connection, or waitMs. The agent must rely on external knowledge to understand how to fill these fields, making the tool difficult to use correctly.

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

Purpose5/5

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

The description clearly states the tool's purpose: navigating within a mini-program. It lists all supported navigation types (navigateTo, redirectTo, reLaunch, switchTab, navigateBack), making it distinct from sibling tools like mp_ensureConnection or mp_currentPage.

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?

No guidance is provided on when to use this tool versus alternatives, nor does it mention prerequisites like establishing a connection via mp_ensureConnection first. The description leaves the agent to infer usage from the enum values 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

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/yfmeii/weapp-dev-mcp'

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