Skip to main content
Back to all releases
// November 19, 2025v0.10.3

Platform

MCP Gateway

Dynamic Toolsets v2 - Combining progressive discovery and semantic search

Introducing Dynamic Toolsets v2. Our new approach combines the strengths of both methods into a unified system that exposes three core tools: search_tools, describe_tools, and execute_tool. The key insight is that tool descriptions provide structure and discoverability, while semantic search provides efficiency and natural language discovery. Together, they create a system that scales naturally without sacrificing usability. Dynamic Toolsets v2

Features

  • Speakeasy Functions composition - Functions instances are now composable. This allows some similarity to Hono's grouping pattern, making it possible to split and organize Speakeasy Functions code bases more than before. Before:
    const functions = new Functions({
    envSchema: {
    TRAIN_API_KEY: z.string().describe("API key for the train service"),
    FLIGHT_API_KEY: z.string().describe("API key for the flight service"),
    },
    })
    .tool({
    name: "train_book",
    description: "Books a train ticket",
    })
    .tool({
    name: "train_status",
    description: "Gets the status of a train",
    })
    .tool({
    name: "flight_book",
    description: "Books a flight ticket",
    })
    .tool({
    name: "flight_status",
    description: "Gets the status of a flight",
    });
    Now, with composability:
    // train.ts
    const trainFunctions = new Functions({
    envSchema: {
    TRAIN_API_KEY: z.string().describe("API key for the train service"),
    },
    })
    .tool({
    name: "train_book",
    description: "Books a train ticket",
    })
    .tool({
    name: "train_status",
    description: "Gets the status of a train",
    });
    // flight.ts
    const flightFunctions = new Functions({
    envSchema: {
    FLIGHT_API_KEY: z.string().describe("API key for the flight service"),
    },
    })
    .tool({
    name: "flight_book",
    description: "Books a flight ticket",
    })
    .tool({
    name: "flight_status",
    description: "Gets the status of a flight",
    });
    // index.ts
    import { trainFunctions } from './train'
    import { flightFunctions } from './flight'
    const travelFunctions = new Functions()
    .extend(trainFunctions)
    .extend(flightFunctions);
  • Integrate dynamic toolsets v2 with progressive and semantic search in one feature
  • Introduce announcement modal for new Speakeasy Functions release
  • Add Resend example demonstrating email reminders via the Resend API
  • Support non-blocking deployment creation for non-intrusive deployment initiation
  • Update product description tagline and rearrange sidebar UI elements
  • Index embedding tags to enhance search and retrieval operations
  • Add tags to embeddings table for dynamic toolsets phase two

Fixes

  • Wrap long environment variable names in Playground auth tab to prevent overflow
  • Fix Moonshine button issues and adjust various UI elements
  • Ensure dark mode compatibility for Shiki themes
  • Increase function reap batch size for improved resource recovery
  • Enhance deployment tracking and local CLI setup processes
  • Update esbuild configuration with CommonJS require shim for better compatibility
  • Correct textual content in create-function CLI for improved clarity
Speakeasy Team
Speakeasy Team
View on GitHub