Skip to main content
Glama
Long0308

VN Stock API MCP Server

by Long0308

list_vn_stocks

Retrieve Vietnam stock symbols from HOSE, HNX, and UPCOM exchanges. Filter by exchange or search by symbol/company name to identify available stocks.

Instructions

List all available Vietnam stock symbols. Returns a comprehensive list of stock symbols traded on Vietnamese stock exchanges (HOSE, HNX, UPCOM). Similar to list_assets in coincap-mcp.

Input Schema

TableJSON Schema
NameRequiredDescriptionDefault
exchangeNoFilter by exchange: HOSE (Ho Chi Minh Stock Exchange), HNX (Hanoi Stock Exchange), UPCOM (Unlisted Public Company Market), or 'all' for all exchanges.
searchNoOptional search query to filter stocks by symbol or company name.

Implementation Reference

  • The handler function for 'list_vn_stocks' tool. Fetches Vietnam stock symbols from FireAnt API or uses static fallback list, applies filters for exchange and search query, and returns structured JSON response.
    private async listVNStocks(args: {
      exchange?: "HOSE" | "HNX" | "UPCOM" | "all";
      search?: string;
    }) {
      const { exchange = "all", search } = args;
    
      try {
        // Try to get list from FireAnt API
        let stocks: any[] = [];
    
        try {
          // FireAnt API endpoint for listing stocks
          const apiUrl = "https://restv2.fireant.vn/symbols";
          const response = await fetch(apiUrl, {
            headers: {
              "User-Agent": "Mozilla/5.0",
              "Accept": "application/json",
            },
          });
    
          if (response.ok) {
            const data: any = await response.json();
            stocks = Array.isArray(data) ? data : data.data || data.symbols || [];
          }
        } catch (error) {
          // If API fails, use a comprehensive static list of popular Vietnamese stocks
          stocks = this.getPopularVNStocks();
        }
    
        // If API returned empty or failed, use static list
        if (stocks.length === 0) {
          stocks = this.getPopularVNStocks();
        }
    
        // Filter by exchange if specified
        let filteredStocks = stocks;
        if (exchange !== "all") {
          filteredStocks = stocks.filter(
            (stock: any) =>
              stock.exchange?.toUpperCase() === exchange ||
              stock.market?.toUpperCase() === exchange ||
              (exchange === "HOSE" && this.isHOSEStock(stock.symbol || stock.code)) ||
              (exchange === "HNX" && this.isHNXStock(stock.symbol || stock.code)) ||
              (exchange === "UPCOM" && this.isUPCOMStock(stock.symbol || stock.code))
          );
        }
    
        // Filter by search query if provided
        if (search) {
          const lowerSearch = search.toLowerCase();
          filteredStocks = filteredStocks.filter(
            (stock: any) =>
              (stock.symbol || stock.code || "").toLowerCase().includes(lowerSearch) ||
              (stock.name || stock.companyName || "").toLowerCase().includes(lowerSearch) ||
              (stock.companyNameEn || "").toLowerCase().includes(lowerSearch)
          );
        }
    
        return {
          content: [
            {
              type: "text",
              text: JSON.stringify(
                {
                  exchange: exchange,
                  total: filteredStocks.length,
                  stocks: filteredStocks,
                  note: "This list includes major Vietnamese stocks. For complete real-time data, use get_stock_price_fireant with specific symbols.",
                },
                null,
                2
              ),
            },
          ],
        };
      } catch (error) {
        return {
          content: [
            {
              type: "text",
              text: JSON.stringify(
                {
                  error: error instanceof Error ? error.message : String(error),
                  stocks: this.getPopularVNStocks(),
                  note: "Using fallback static list of popular Vietnamese stocks.",
                },
                null,
                2
              ),
            },
          ],
          isError: true,
        };
      }
    }
  • JSON schema defining the input parameters for the list_vn_stocks tool: exchange filter and optional search query.
    inputSchema: {
      type: "object",
      properties: {
        exchange: {
          type: "string",
          enum: ["HOSE", "HNX", "UPCOM", "all"],
          description: "Filter by exchange: HOSE (Ho Chi Minh Stock Exchange), HNX (Hanoi Stock Exchange), UPCOM (Unlisted Public Company Market), or 'all' for all exchanges.",
        },
        search: {
          type: "string",
          description: "Optional search query to filter stocks by symbol or company name.",
        },
      },
    },
  • src/index.ts:231-232 (registration)
    Registration of the list_vn_stocks handler in the tool dispatch switch statement within CallToolRequestSchema handler.
    case "list_vn_stocks":
      return await this.listVNStocks(args as any);
  • src/index.ts:135-153 (registration)
    Tool registration in the tools array used by ListToolsRequestSchema, including name, description, and input schema.
    {
      name: "list_vn_stocks",
      description:
        "List all available Vietnam stock symbols. Returns a comprehensive list of stock symbols traded on Vietnamese stock exchanges (HOSE, HNX, UPCOM). Similar to list_assets in coincap-mcp.",
      inputSchema: {
        type: "object",
        properties: {
          exchange: {
            type: "string",
            enum: ["HOSE", "HNX", "UPCOM", "all"],
            description: "Filter by exchange: HOSE (Ho Chi Minh Stock Exchange), HNX (Hanoi Stock Exchange), UPCOM (Unlisted Public Company Market), or 'all' for all exchanges.",
          },
          search: {
            type: "string",
            description: "Optional search query to filter stocks by symbol or company name.",
          },
        },
      },
    },
  • Static fallback helper providing a comprehensive hardcoded list of popular Vietnamese stock symbols across HOSE, HNX, and UPCOM exchanges, used when API fetch fails.
    private getPopularVNStocks(): any[] {
      // Comprehensive list of popular Vietnamese stocks
      return [
        // HOSE - Ho Chi Minh Stock Exchange (Large cap)
        { symbol: "VIC", name: "Vingroup", exchange: "HOSE", market: "HOSE" },
        { symbol: "VNM", name: "Vinamilk", exchange: "HOSE", market: "HOSE" },
        { symbol: "VCB", name: "Vietcombank", exchange: "HOSE", market: "HOSE" },
        { symbol: "VRE", name: "Vincom Retail", exchange: "HOSE", market: "HOSE" },
        { symbol: "VHM", name: "Vinhomes", exchange: "HOSE", market: "HOSE" },
        { symbol: "HPG", name: "Hoa Phat Group", exchange: "HOSE", market: "HOSE" },
        { symbol: "MSN", name: "Masan Group", exchange: "HOSE", market: "HOSE" },
        { symbol: "VJC", name: "VietJet Air", exchange: "HOSE", market: "HOSE" },
        { symbol: "FPT", name: "FPT Corporation", exchange: "HOSE", market: "HOSE" },
        { symbol: "TCB", name: "Techcombank", exchange: "HOSE", market: "HOSE" },
        { symbol: "CTG", name: "VietinBank", exchange: "HOSE", market: "HOSE" },
        { symbol: "BID", name: "BIDV", exchange: "HOSE", market: "HOSE" },
        { symbol: "MWG", name: "Mobile World", exchange: "HOSE", market: "HOSE" },
        { symbol: "SSI", name: "SSI Securities", exchange: "HOSE", market: "HOSE" },
        { symbol: "VSH", name: "Vinhomes", exchange: "HOSE", market: "HOSE" },
        { symbol: "PLX", name: "Petrolimex", exchange: "HOSE", market: "HOSE" },
        { symbol: "GAS", name: "PetroVietnam Gas", exchange: "HOSE", market: "HOSE" },
        { symbol: "POW", name: "PetroVietnam Power", exchange: "HOSE", market: "HOSE" },
        { symbol: "BVH", name: "Bao Viet Holdings", exchange: "HOSE", market: "HOSE" },
        { symbol: "MBB", name: "MB Bank", exchange: "HOSE", market: "HOSE" },
        { symbol: "ACB", name: "ACB Bank", exchange: "HOSE", market: "HOSE" },
        { symbol: "TPB", name: "TPBank", exchange: "HOSE", market: "HOSE" },
        { symbol: "STB", name: "Sacombank", exchange: "HOSE", market: "HOSE" },
        { symbol: "VPB", name: "VPBank", exchange: "HOSE", market: "HOSE" },
        { symbol: "EIB", name: "Eximbank", exchange: "HOSE", market: "HOSE" },
        { symbol: "HDB", name: "HDBank", exchange: "HOSE", market: "HOSE" },
        { symbol: "SHB", name: "SHB", exchange: "HOSE", market: "HOSE" },
        { symbol: "VCI", name: "Viet Capital Securities", exchange: "HOSE", market: "HOSE" },
        { symbol: "VND", name: "VNDirect Securities", exchange: "HOSE", market: "HOSE" },
        { symbol: "BSI", name: "BIDV Securities", exchange: "HOSE", market: "HOSE" },
        { symbol: "VIX", name: "VIX Securities", exchange: "HOSE", market: "HOSE" },
        { symbol: "SHS", name: "Saigon-Hanoi Securities", exchange: "HOSE", market: "HOSE" },
        { symbol: "VRE", name: "Vincom Retail", exchange: "HOSE", market: "HOSE" },
        { symbol: "MWG", name: "Mobile World", exchange: "HOSE", market: "HOSE" },
        { symbol: "FRT", name: "FPT Retail", exchange: "HOSE", market: "HOSE" },
        { symbol: "DGW", name: "Digiworld", exchange: "HOSE", market: "HOSE" },
        { symbol: "PNJ", name: "Phu Nhuan Jewelry", exchange: "HOSE", market: "HOSE" },
        { symbol: "MSH", name: "Masan Consumer", exchange: "HOSE", market: "HOSE" },
        { symbol: "VGC", name: "Viglacera", exchange: "HOSE", market: "HOSE" },
        { symbol: "DXG", name: "Dat Xanh Group", exchange: "HOSE", market: "HOSE" },
        { symbol: "NVL", name: "Novaland", exchange: "HOSE", market: "HOSE" },
        { symbol: "KDH", name: "Khang Dien House", exchange: "HOSE", market: "HOSE" },
        { symbol: "HDG", name: "Hoa Binh Group", exchange: "HOSE", market: "HOSE" },
        { symbol: "BCM", name: "Becamex", exchange: "HOSE", market: "HOSE" },
        { symbol: "DXS", name: "Dat Xanh Services", exchange: "HOSE", market: "HOSE" },
        { symbol: "QCG", name: "Quoc Cuong Gia Lai", exchange: "HOSE", market: "HOSE" },
        { symbol: "VHC", name: "Vinh Hoan", exchange: "HOSE", market: "HOSE" },
        { symbol: "VTO", name: "Viettel Post", exchange: "HOSE", market: "HOSE" },
        { symbol: "GMD", name: "Gemadept", exchange: "HOSE", market: "HOSE" },
        { symbol: "VSC", name: "Vietnam Container", exchange: "HOSE", market: "HOSE" },
        { symbol: "GSP", name: "Gemadept Port", exchange: "HOSE", market: "HOSE" },
        { symbol: "VOS", name: "Vietnam Oil and Gas", exchange: "HOSE", market: "HOSE" },
        { symbol: "PVS", name: "PetroVietnam Services", exchange: "HOSE", market: "HOSE" },
        { symbol: "PVB", name: "PetroVietnam Insurance", exchange: "HOSE", market: "HOSE" },
        { symbol: "BSR", name: "Binh Son Refining", exchange: "HOSE", market: "HOSE" },
        { symbol: "OIL", name: "PV Oil", exchange: "HOSE", market: "HOSE" },
        { symbol: "PVT", name: "PetroVietnam Transportation", exchange: "HOSE", market: "HOSE" },
        { symbol: "PVD", name: "PV Drilling", exchange: "HOSE", market: "HOSE" },
        { symbol: "PVG", name: "PetroVietnam Gas", exchange: "HOSE", market: "HOSE" },
        { symbol: "HSG", name: "Hoa Sen Group", exchange: "HOSE", market: "HOSE" },
        { symbol: "HPX", name: "Hoa Phat Xanh", exchange: "HOSE", market: "HOSE" },
        { symbol: "NKG", name: "Nam Kim Steel", exchange: "HOSE", market: "HOSE" },
        { symbol: "SMC", name: "SMC Trading", exchange: "HOSE", market: "HOSE" },
        { symbol: "VGS", name: "Vietnam Gas", exchange: "HOSE", market: "HOSE" },
        { symbol: "GEX", name: "Gelex", exchange: "HOSE", market: "HOSE" },
        { symbol: "REE", name: "REE Corporation", exchange: "HOSE", market: "HOSE" },
        { symbol: "DRC", name: "Danang Rubber", exchange: "HOSE", market: "HOSE" },
        { symbol: "CSM", name: "Cao Su May", exchange: "HOSE", market: "HOSE" },
        { symbol: "DCM", name: "Dong Nai Rubber", exchange: "HOSE", market: "HOSE" },
        { symbol: "SRC", name: "Saigon Rubber", exchange: "HOSE", market: "HOSE" },
        { symbol: "DPM", name: "PetroVietnam Fertilizer", exchange: "HOSE", market: "HOSE" },
        { symbol: "LAS", name: "Lao Cai", exchange: "HOSE", market: "HOSE" },
        { symbol: "LIX", name: "Licogi", exchange: "HOSE", market: "HOSE" },
        { symbol: "ROS", name: "FLC Faros", exchange: "HOSE", market: "HOSE" },
        { symbol: "FLC", name: "FLC Group", exchange: "HOSE", market: "HOSE" },
        { symbol: "HBC", name: "Hoa Binh Construction", exchange: "HOSE", market: "HOSE" },
        { symbol: "CTD", name: "Coteccons", exchange: "HOSE", market: "HOSE" },
        { symbol: "LCG", name: "Lizen", exchange: "HOSE", market: "HOSE" },
        { symbol: "HNG", name: "Hoang Anh Gia Lai", exchange: "HOSE", market: "HOSE" },
        { symbol: "VGC", name: "Viglacera", exchange: "HOSE", market: "HOSE" },
        { symbol: "VCS", name: "Vietnam Container", exchange: "HOSE", market: "HOSE" },
        { symbol: "VRE", name: "Vincom Retail", exchange: "HOSE", market: "HOSE" },
        { symbol: "VHM", name: "Vinhomes", exchange: "HOSE", market: "HOSE" },
        { symbol: "VIC", name: "Vingroup", exchange: "HOSE", market: "HOSE" },
        { symbol: "VNM", name: "Vinamilk", exchange: "HOSE", market: "HOSE" },
        { symbol: "VCB", name: "Vietcombank", exchange: "HOSE", market: "HOSE" },
        { symbol: "VJC", name: "VietJet Air", exchange: "HOSE", market: "HOSE" },
        { symbol: "FPT", name: "FPT Corporation", exchange: "HOSE", market: "HOSE" },
        { symbol: "TCB", name: "Techcombank", exchange: "HOSE", market: "HOSE" },
        { symbol: "CTG", name: "VietinBank", exchange: "HOSE", market: "HOSE" },
        { symbol: "BID", name: "BIDV", exchange: "HOSE", market: "HOSE" },
        { symbol: "MWG", name: "Mobile World", exchange: "HOSE", market: "HOSE" },
        { symbol: "SSI", name: "SSI Securities", exchange: "HOSE", market: "HOSE" },
        { symbol: "PLX", name: "Petrolimex", exchange: "HOSE", market: "HOSE" },
        { symbol: "GAS", name: "PetroVietnam Gas", exchange: "HOSE", market: "HOSE" },
        { symbol: "POW", name: "PetroVietnam Power", exchange: "HOSE", market: "HOSE" },
        { symbol: "BVH", name: "Bao Viet Holdings", exchange: "HOSE", market: "HOSE" },
        { symbol: "MBB", name: "MB Bank", exchange: "HOSE", market: "HOSE" },
        { symbol: "ACB", name: "ACB Bank", exchange: "HOSE", market: "HOSE" },
        { symbol: "TPB", name: "TPBank", exchange: "HOSE", market: "HOSE" },
        { symbol: "STB", name: "Sacombank", exchange: "HOSE", market: "HOSE" },
        { symbol: "VPB", name: "VPBank", exchange: "HOSE", market: "HOSE" },
        { symbol: "EIB", name: "Eximbank", exchange: "HOSE", market: "HOSE" },
        { symbol: "HDB", name: "HDBank", exchange: "HOSE", market: "HOSE" },
        { symbol: "SHB", name: "SHB", exchange: "HOSE", market: "HOSE" },
        // HNX - Hanoi Stock Exchange
        { symbol: "VCG", name: "Viettel Construction", exchange: "HNX", market: "HNX" },
        { symbol: "VCS", name: "Vietnam Container", exchange: "HNX", market: "HNX" },
        { symbol: "VND", name: "VNDirect Securities", exchange: "HNX", market: "HNX" },
        { symbol: "BSI", name: "BIDV Securities", exchange: "HNX", market: "HNX" },
        { symbol: "VIX", name: "VIX Securities", exchange: "HNX", market: "HNX" },
        { symbol: "SHS", name: "Saigon-Hanoi Securities", exchange: "HNX", market: "HNX" },
        { symbol: "VCI", name: "Viet Capital Securities", exchange: "HNX", market: "HNX" },
        { symbol: "CTS", name: "VietinBank Securities", exchange: "HNX", market: "HNX" },
        { symbol: "HCM", name: "Ho Chi Minh Securities", exchange: "HNX", market: "HNX" },
        { symbol: "FTS", name: "FPT Securities", exchange: "HNX", market: "HNX" },
        { symbol: "AGR", name: "Agribank Securities", exchange: "HNX", market: "HNX" },
        { symbol: "BVS", name: "Bao Viet Securities", exchange: "HNX", market: "HNX" },
        { symbol: "MBS", name: "MB Securities", exchange: "HNX", market: "HNX" },
        { symbol: "TVS", name: "TVS Securities", exchange: "HNX", market: "HNX" },
        { symbol: "WSS", name: "WSS Securities", exchange: "HNX", market: "HNX" },
        { symbol: "BSC", name: "Bao Son Securities", exchange: "HNX", market: "HNX" },
        { symbol: "VDS", name: "Viet Dragon Securities", exchange: "HNX", market: "HNX" },
        { symbol: "EVS", name: "EIV Securities", exchange: "HNX", market: "HNX" },
        { symbol: "VNS", name: "Vietnam Securities", exchange: "HNX", market: "HNX" },
        { symbol: "HBS", name: "Hoang Gia Securities", exchange: "HNX", market: "HNX" },
        { symbol: "IVS", name: "IVS Securities", exchange: "HNX", market: "HNX" },
        { symbol: "PSI", name: "PetroVietnam Securities", exchange: "HNX", market: "HNX" },
        { symbol: "VCI", name: "Viet Capital Securities", exchange: "HNX", market: "HNX" },
        { symbol: "VND", name: "VNDirect Securities", exchange: "HNX", market: "HNX" },
        { symbol: "BSI", name: "BIDV Securities", exchange: "HNX", market: "HNX" },
        { symbol: "VIX", name: "VIX Securities", exchange: "HNX", market: "HNX" },
        { symbol: "SHS", name: "Saigon-Hanoi Securities", exchange: "HNX", market: "HNX" },
        // UPCOM - Unlisted Public Company Market
        { symbol: "VGI", name: "Vingroup", exchange: "UPCOM", market: "UPCOM" },
        { symbol: "VRE", name: "Vincom Retail", exchange: "UPCOM", market: "UPCOM" },
        { symbol: "VHM", name: "Vinhomes", exchange: "UPCOM", market: "UPCOM" },
        { symbol: "VIC", name: "Vingroup", exchange: "UPCOM", market: "UPCOM" },
        { symbol: "VNM", name: "Vinamilk", exchange: "UPCOM", market: "UPCOM" },
        { symbol: "VCB", name: "Vietcombank", exchange: "UPCOM", market: "UPCOM" },
        { symbol: "VJC", name: "VietJet Air", exchange: "UPCOM", market: "UPCOM" },
        { symbol: "FPT", name: "FPT Corporation", exchange: "UPCOM", market: "UPCOM" },
        { symbol: "TCB", name: "Techcombank", exchange: "UPCOM", market: "UPCOM" },
        { symbol: "CTG", name: "VietinBank", exchange: "UPCOM", market: "UPCOM" },
        { symbol: "BID", name: "BIDV", exchange: "UPCOM", market: "UPCOM" },
        { symbol: "MWG", name: "Mobile World", exchange: "UPCOM", market: "UPCOM" },
        { symbol: "SSI", name: "SSI Securities", exchange: "UPCOM", market: "UPCOM" },
        { symbol: "PLX", name: "Petrolimex", exchange: "UPCOM", market: "UPCOM" },
        { symbol: "GAS", name: "PetroVietnam Gas", exchange: "UPCOM", market: "UPCOM" },
        { symbol: "POW", name: "PetroVietnam Power", exchange: "UPCOM", market: "UPCOM" },
        { symbol: "BVH", name: "Bao Viet Holdings", exchange: "UPCOM", market: "UPCOM" },
        { symbol: "MBB", name: "MB Bank", exchange: "UPCOM", market: "UPCOM" },
        { symbol: "ACB", name: "ACB Bank", exchange: "UPCOM", market: "UPCOM" },
        { symbol: "TPB", name: "TPBank", exchange: "UPCOM", market: "UPCOM" },
        { symbol: "STB", name: "Sacombank", exchange: "UPCOM", market: "UPCOM" },
        { symbol: "VPB", name: "VPBank", exchange: "UPCOM", market: "UPCOM" },
        { symbol: "EIB", name: "Eximbank", exchange: "UPCOM", market: "UPCOM" },
        { symbol: "HDB", name: "HDBank", exchange: "UPCOM", market: "UPCOM" },
        { symbol: "SHB", name: "SHB", exchange: "UPCOM", market: "UPCOM" },
      ];
    }
Behavior3/5

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

With no annotations provided, the description carries the full burden of behavioral disclosure. It states the tool returns a 'comprehensive list' and specifies the exchanges covered, adding useful context. However, it does not disclose key behavioral traits like whether the list is paginated, real-time, cached, or includes metadata beyond symbols, which are important for a listing tool without annotations.

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

Conciseness5/5

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

The description is front-loaded with the core purpose in the first sentence, followed by additional context in a second sentence. It is concise with no wasted words, efficiently conveying essential information (action, resource, scope, and similarity reference) in two sentences that each earn their place.

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

Completeness4/5

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

Given the tool's low complexity (simple listing with two optional parameters), high schema coverage (100%), and no output schema, the description is mostly complete. It covers the purpose, scope, and similarity to another tool, but lacks details on output format (e.g., structure of the returned list) and behavioral aspects like performance or limitations, which would enhance completeness for a listing tool.

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

Parameters3/5

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

The input schema has 100% description coverage, clearly documenting both parameters (exchange with enum values and search as optional filter). The description adds no additional parameter semantics beyond what the schema provides, such as examples or usage tips. Since schema coverage is high, the baseline score of 3 is appropriate, as the description does not compensate but also does not detract.

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 specific action ('List all available Vietnam stock symbols') and resource ('stock symbols traded on Vietnamese stock exchanges'), distinguishing it from siblings like get_stock_price_fireant or search_vn_stock_api by focusing on listing rather than price retrieval or searching. It explicitly mentions the scope (HOSE, HNX, UPCOM exchanges) and references a similar tool (list_assets in coincap-mcp) for context.

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

Usage Guidelines4/5

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

The description provides clear context for when to use this tool (to list Vietnam stock symbols) and implicitly distinguishes it from siblings by not overlapping with their purposes (e.g., analyze_doji_pattern for pattern analysis, get_stock_price_fireant for price data). However, it lacks explicit guidance on when not to use it or direct alternatives among siblings, such as search_vn_stock_api for filtered searches.

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/Long0308/vn-stock-api-mcp'

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