{"id":24173098,"url":"https://github.com/hideya/langchain-mcp-tools-ts","last_synced_at":"2025-10-08T16:56:01.249Z","repository":{"id":271191853,"uuid":"912659268","full_name":"hideya/langchain-mcp-tools-ts","owner":"hideya","description":"MCP to LangChain Tools Conversion Utility / TypeScript","archived":false,"fork":false,"pushed_at":"2025-09-15T01:00:45.000Z","size":961,"stargazers_count":22,"open_issues_count":0,"forks_count":7,"subscribers_count":3,"default_branch":"main","last_synced_at":"2025-10-06T10:44:11.470Z","etag":null,"topics":["langchain","langchain-typescript","mcp","mcp-client","modelcontextprotocol","nodejs","npm-package","tool-calling","typescript"],"latest_commit_sha":null,"homepage":"https://www.npmjs.com/package/@h1deya/langchain-mcp-tools","language":"TypeScript","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"mit","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/hideya.png","metadata":{"files":{"readme":"README.md","changelog":"CHANGELOG.md","contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null,"zenodo":null,"notice":null,"maintainers":null,"copyright":null,"agents":null,"dco":null,"cla":null}},"created_at":"2025-01-06T06:05:01.000Z","updated_at":"2025-09-15T01:00:48.000Z","dependencies_parsed_at":"2025-03-25T02:33:40.313Z","dependency_job_id":"1e40ad83-4cfa-40f6-b78a-94bab2048e0f","html_url":"https://github.com/hideya/langchain-mcp-tools-ts","commit_stats":null,"previous_names":["hideya/mcp-langchain-tools","hideya/mcp-langchain-tools-ts","hideya/langchain-mcp-tools-ts"],"tags_count":9,"template":false,"template_full_name":null,"purl":"pkg:github/hideya/langchain-mcp-tools-ts","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/hideya%2Flangchain-mcp-tools-ts","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/hideya%2Flangchain-mcp-tools-ts/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/hideya%2Flangchain-mcp-tools-ts/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/hideya%2Flangchain-mcp-tools-ts/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/hideya","download_url":"https://codeload.github.com/hideya/langchain-mcp-tools-ts/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/hideya%2Flangchain-mcp-tools-ts/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":278981512,"owners_count":26079640,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","status":"online","status_checked_at":"2025-10-08T02:00:06.501Z","response_time":56,"last_error":null,"robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":true,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["langchain","langchain-typescript","mcp","mcp-client","modelcontextprotocol","nodejs","npm-package","tool-calling","typescript"],"created_at":"2025-01-13T01:14:24.463Z","updated_at":"2025-10-08T16:56:01.213Z","avatar_url":"https://github.com/hideya.png","language":"TypeScript","funding_links":[],"categories":["🌐 Web Development","📚 Projects (2474 total)"],"sub_categories":["MCP Servers"],"readme":"# MCP to LangChain Tools Conversion Utility / TypeScript [![License: MIT](https://img.shields.io/badge/License-MIT-blue.svg)](https://github.com/hideya/langchain-mcp-tools-ts/blob/main/LICENSE) [![npm version](https://img.shields.io/npm/v/@h1deya/langchain-mcp-tools.svg)](https://www.npmjs.com/package/@h1deya/langchain-mcp-tools) [![network dependents](https://dependents.info/hideya/langchain-mcp-tools-ts/badge)](https://dependents.info/hideya/langchain-mcp-tools-ts)\n\nA simple, lightweight library to use \n[Model Context Protocol (MCP)](https://modelcontextprotocol.io/)\nserver tools from LangChain.\n\n\u003cimg width=\"500px\" alt=\"langchain-mcp-tools-diagram\" src=\"https://raw.githubusercontent.com/hideya/langchain-mcp-tools-py/refs/heads/main/docs/images/langchain-mcp-tools-diagram.png\" /\u003e\n\nIts simplicity and extra features, such as\n[tools schema adjustments for LLM compatibility](https://github.com/hideya/langchain-mcp-tools-ts/blob/main/README.md#llm-provider-schema-compatibility)\nand [tools invocation logging](https://github.com/hideya/langchain-mcp-tools-ts/blob/main/README.md#debugging-and-logging),\nmake it a useful basis for your experiments and customizations.\nHowever, it only supports text results of tool calls and does not support MCP features other than Tools.\n\n[LangChain's **official LangChain.js MCP Adapters** library](https://www.npmjs.com/package/@langchain/mcp-adapters),\nwhich supports comprehensive integration with LangChain, has been released.\nYou may want to consider using it if you don't have specific needs for this library.\n\n## Prerequisites\n\n- Node.js 18+\n\n## Installation\n\n```bash\nnpm i @h1deya/langchain-mcp-tools\n```\n\n## Quick Start\n\n`convertMcpToLangchainTools()` utility function accepts MCP server configurations\nthat follow the same structure as\n[Claude for Desktop](https://modelcontextprotocol.io/quickstart/user),\nbut only the contents of the `mcpServers` property,\nand is expressed as a JS Object, e.g.:\n\n```ts\nconst mcpServers: McpServersConfig = {\n  filesystem: {\n    command: \"npx\",\n    args: [\"-y\", \"@modelcontextprotocol/server-filesystem\", \".\"]\n  },\n  fetch: {\n    command: \"uvx\",\n    args: [\"mcp-server-fetch\"]\n  },\n  github: {\n    type: \"http\",\n    url: \"https://api.githubcopilot.com/mcp/\",\n    headers: {\n      \"Authorization\": `Bearer ${process.env.GITHUB_PERSONAL_ACCESS_TOKEN}`\n    }\n  },\n  notion: {  // For MCP servers that require OAuth, consider using \"mcp-remote\"\n    command: \"npx\",\n    args: [\"-y\", \"mcp-remote\", \"https://mcp.notion.com/mcp\"],\n  },\n};\n\nconst { tools, cleanup } = await convertMcpToLangchainTools(\n  mcpServers, {\n    // Perform provider-specific JSON schema transformations to prevent schema compatibility issues\n    llmProvider: \"google_gemini\"\n    // llmProvider: \"openai\"\n    // llmProvider: \"anthropic\"  // no transformations\n    // llmProvider: \"xai\"  // no transformations\n    // llmProvider: \"none\"  // for others (default)\n  }\n);\n```\n\nThis utility function initializes all specified MCP servers in parallel,\nand returns LangChain Tools\n([`tools: StructuredTool[]`](https://api.js.langchain.com/classes/_langchain_core.tools.StructuredTool.html))\nby gathering available MCP tools from the servers,\nand by wrapping them into LangChain tools.\n\nWhen `llmProvider` option is specified, it performs LLM provider-specific schema transformations\nfor MCP tools to prevent schema compatibility issues.\nSet this option when you enconter schema related warnings/errors while execution.  \n[See below](https://github.com/hideya/langchain-mcp-tools-ts/blob/main/README.md#llm-provider-schema-compatibility) for details.\n\nIt also returns an async callback function (`cleanup: McpServerCleanupFn`)\nto be invoked to close all MCP server sessions when finished.\n\nThe returned tools can be used with LangChain, e.g.:\n\n```ts\n// import { ChatGoogleGenerativeAI } from \"@langchain/google-genai\";\nconst llm = new ChatGoogleGenerativeAI({ model: \"gemini-2.5-flash\" });\n\n// import { createReactAgent } from \"@langchain/langgraph/prebuilt\";\nconst agent = createReactAgent({\n  llm,\n  tools\n});\n```\n\nThe returned `cleanup` function properly handles resource cleanup:\n\n- Closes all MCP server connections concurrently and logs any cleanup failures\n- Continues cleanup of remaining servers even if some fail\n- Should always be called when done using the tools\n\nIt is typically invoked in a finally block:\n\n```ts\nconst { tools, cleanup } = await convertMcpToLangchainTools(mcpServers);\n\ntry {\n  // Use tools with your LLM\n} finally {\n  // Always cleanup, even if errors occur\n  await cleanup();\n}\n```\n\nA minimal but complete working usage example can be found\n[in this example in the langchain-mcp-tools-ts-usage repo](https://github.com/hideya/langchain-mcp-tools-ts-usage/blob/main/src/index.ts)\n\nFor hands-on experimentation with MCP server integration,\ntry [this MCP Client CLI tool built with this library](https://www.npmjs.com/package/@h1deya/mcp-client-cli)\n\nA Python equivalent of this utility is available\n[here](https://pypi.org/project/langchain-mcp-tools)\n\n## Introduction\n\nThis package is intended to simplify the use of\n[Model Context Protocol (MCP)](https://modelcontextprotocol.io/)\nserver tools with LangChain / TypeScript.\n\n[Model Context Protocol (MCP)](https://modelcontextprotocol.io/) is the de facto industry standard\nthat dramatically expands the scope of LLMs by enabling the integration of external tools and resources,\nincluding DBs, Cloud Storages, GitHub, Docker, Slack, and more.\nThere are quite a few useful MCP servers already available.  \nSee [MCP Server Listing on the Official Site](https://github.com/modelcontextprotocol/servers?tab=readme-ov-file#model-context-protocol-servers).\n\nThis utility's goal is to make these numerous MCP servers easily accessible from LangChain.  \nIt contains a utility function `convertMcpToLangchainTools()`.  \nThis async function handles parallel initialization of specified multiple MCP servers\nand converts their available tools into an array of LangChain-compatible tools.\nIt also performs LLM provider-specific schema transformations\nto prevent [schema compatibility issues](https://github.com/hideya/langchain-mcp-tools-ts/blob/main/README.md#llm-provider-schema-compatibility)\n\nFor detailed information on how to use this library, please refer to the following document:\n[\"Supercharging LangChain: Integrating 2000+ MCP with ReAct\"](https://medium.com/@h1deya/supercharging-langchain-integrating-450-mcp-with-react-d4e467cbf41a).\n\n## MCP Protocol Support\n\nThis library supports **MCP Protocol version 2025-03-26** and maintains backwards compatibility with version 2024-11-05.\nIt follows the [official MCP specification](https://modelcontextprotocol.io/specification/2025-03-26/) for transport selection and backwards compatibility.\n\n### Limitations\n\n- **Tool Return Types**: Currently, only text results of tool calls are supported.\nThe library uses LangChain's `response_format: 'content'` (the default), which only supports text strings.\nWhile MCP tools can return multiple content types (text, images, etc.), this library currently filters and uses only text content.\n- **MCP Features**: Only MCP [Tools](https://modelcontextprotocol.io/docs/concepts/tools) are supported. Other MCP features like Resources, Prompts, and Sampling are not implemented.\n\n### Notes\n\n- **LLM Compatibility and Schema Transformations**: The library can perform schema transformations for LLM compatibility.\n  [See below](https://github.com/hideya/langchain-mcp-tools-ts/blob/main/README.md#llm-provider-schema-compatibility) for details.\n- **Passing PATH Env Variable**: The library automatically adds the `PATH` environment variable to stdio server configrations if not explicitly provided to ensure servers can find required executables.\n\n## Features\n\n### `stderr` Redirection for Local MCP Server \n\nA new key `\"stderr\"` has been introduced to specify a file descriptor\nto which local (stdio) MCP server's stderr is redirected.  \nThe key name `stderr` is derived from\nTypeScript SDK's [`StdioServerParameters`](https://github.com/modelcontextprotocol/typescript-sdk/blob/131776764536b5fdca642df51230a3746fb4ade0/src/client/stdio.ts#L32).\n\n```ts\n    const logPath = `mcp-server-${serverName}.log`;\n    const logFd = fs.openSync(logPath, \"w\");\n    mcpServers[serverName].stderr = logFd;\n```\n\nA usage example can be found [here](\nhttps://github.com/hideya/langchain-mcp-tools-ts-usage/blob/694b877ed5336bfcd5274d95d3f6d14bed0937a6/src/index.ts#L72-L83)\n\n### Working Directory Configuration for Local MCP Servers\n\nThe working directory that is used when spawning a local (stdio) MCP server\ncan be specified with the `\"cwd\"` key as follows:\n\n```ts\n    \"local-server-name\": {\n      command: \"...\",\n      args: [...],\n      cwd: \"/working/directory\"  // the working dir to be use by the server\n    },\n```\n\nThe key name `cwd` is derived from\nTypeScript SDK's [`StdioServerParameters`](https://github.com/modelcontextprotocol/typescript-sdk/blob/131776764536b5fdca642df51230a3746fb4ade0/src/client/stdio.ts#L39).\n\n### Transport Selection Priority\n\nThe library selects transports using the following priority order:\n\n1. **Explicit transport/type field** (must match URL protocol if URL provided)\n2. **URL protocol auto-detection** (http/https → StreamableHTTP → SSE, ws/wss → WebSocket)\n3. **Command presence** → Stdio transport\n4. **Error** if none of the above match\n\nThis ensures predictable behavior while allowing flexibility for different deployment scenarios.\n\n### Remote MCP Server Support\n\n`mcp_servers` configuration for Streamable HTTP, SSE and Websocket servers are as follows:\n\n```ts\n    // Auto-detection: tries Streamable HTTP first, falls back to SSE on 4xx errors\n    \"auto-detect-server\": {\n        url: `http://${server_host}:${server_port}/...`\n    },\n\n    // Explicit Streamable HTTP\n    \"streamable-http-server\": {\n        url: `http://${server_host}:${server_port}/...`,\n        transport: \"streamable_http\"\n        // type: \"http\"  // VSCode-style config also works instead of the above\n    },\n\n    // Explicit SSE\n    \"sse-server-name\": {\n        url: `http://${sse_server_host}:${sse_server_port}/...`,\n        transport: \"sse\"  // or `type: \"sse\"`\n    },\n\n    // WebSocket\n    \"ws-server-name\": {\n        url: `ws://${ws_server_host}:${ws_server_port}/...`\n        // optionally `transport: \"ws\"` or `type: \"ws\"`\n    },\n```\n\nFor the convenience of adding authorization headers, the following shorthand expression is supported.\nThis header configuration will be overridden if either `streamableHTTPOptions` or `sseOptions` is specified (details below).\n\n```ts\n    github: {\n      // To avoid auto protocol fallback, specify the protocol explicitly when using authentication\n      type: \"http\",  // or `transport: \"http\",`\n      url: \"https://api.githubcopilot.com/mcp/\",\n      headers: {\n        \"Authorization\": `Bearer ${process.env.GITHUB_PERSONAL_ACCESS_TOKEN}`\n      }\n    },\n```\n\nNOTE: When accessing the GitHub MCP server, [GitHub PAT (Personal Access Token)](https://github.com/settings/personal-access-tokens)\nalone is not enough; your GitHub account must have an active Copilot subscription or be assigned a Copilot license through your organization.\n\n**Auto-detection behavior (default):**\n- For HTTP/HTTPS URLs without explicit `transport`, the library follows [MCP specification recommendations](https://modelcontextprotocol.io/specification/2025-03-26/basic/transports#backwards-compatibility)\n- First attempts Streamable HTTP transport\n- If Streamable HTTP fails with a 4xx error, automatically falls back to SSE transport\n- Non-4xx errors (network issues, etc.) are re-thrown without fallback\n\n**Explicit transport selection:**\n- Set `transport: \"streamable_http\"` (or VSCode-style config `type: \"http\"`) to force Streamable HTTP (no fallback)\n- Set `transport: \"sse\"` to force SSE transport\n- WebSocket URLs (`ws://` or `wss://`) always use WebSocket transport\n\nStreamable HTTP is the modern MCP transport that replaces the older HTTP+SSE transport. According to the [official MCP documentation](https://modelcontextprotocol.io/docs/concepts/transports): \"SSE as a standalone transport is deprecated as of protocol version 2025-03-26. It has been replaced by Streamable HTTP, which incorporates SSE as an optional streaming mechanism.\"\n\n### Accessing Remote MCP Servers with OAuth Quickly\n\nIf you need to use MCP servers that require OAuth, consider using **\"[mcp-remote](https://www.npmjs.com/package/mcp-remote)\"**.\n\n```ts\n    notionMCP: {\n      command: \"npx\",\n      args: [\"-y\", \"mcp-remote\", \"https://mcp.notion.com/mcp\"],\n    },\n```\n\n### Authentication Support for Streamable HTTP Connections\n\nThe library supports OAuth 2.1 authentication for Streamable HTTP connections:\n\n```ts\nimport { OAuthClientProvider } from '@modelcontextprotocol/sdk/client/auth.js';\n\n// Implement your own OAuth client provider\nclass MyOAuthProvider implements OAuthClientProvider {\n  // Implementation details...\n}\n\nconst mcpServers = {\n  \"secure-streamable-server\": {\n    url: \"https://secure-mcp-server.example.com/mcp\",\n    // To avoid auto protocol fallback, specify the protocol explicitly when using authentication\n    transport: \"streamable_http\",  // or `type: \"http\",`\n    streamableHTTPOptions: {\n      // Provide an OAuth client provider\n      authProvider: new MyOAuthProvider(),\n      \n      // Optionally customize HTTP requests\n      requestInit: {\n        headers: {\n          'X-Custom-Header': 'custom-value'\n        }\n      },\n      \n      // Optionally configure reconnection behavior\n      reconnectionOptions: {\n        maxReconnectAttempts: 5,\n        reconnectDelay: 1000\n      }\n    }\n  }\n};\n```\n\nTest implementations are provided:\n\n- **Streamable HTTP Authentication Tests**:\n  - MCP client uses this library: [streamable-http-auth-test-client.ts](https://github.com/hideya/langchain-mcp-tools-ts/tree/main/testfiles/streamable-http-auth-test-client.ts)\n  - Test MCP Server:  [streamable-http-auth-test-server.ts](https://github.com/hideya/langchain-mcp-tools-ts/tree/main/testfiles/streamable-http-auth-test-server.ts)\n\n## API docs\n\nCan be found [here](https://hideya.github.io/langchain-mcp-tools-ts/modules.html)\n\n## Change Log\n\nCan be found [here](https://github.com/hideya/langchain-mcp-tools-ts/blob/main/CHANGELOG.md)\n\n## Building from Source\n\nSee [README_DEV.md](https://github.com/hideya/langchain-mcp-tools-ts/blob/main/README_DEV.md) for details.\n\n## Appendix\n\n### Troubleshooting\n\n1. **Enable debug logging**: Set `logLevel: \"debug\"` to see detailed connection and execution logs\n2. **Check server stderr**: For stdio MCP servers, use `stderr` redirection to capture server error output\n3. **Test explicit transports**: Try forcing specific transport types to isolate auto-detection issues\n4. **Verify server independently**: Refer to [Debugging Section in MCP documentation](https://modelcontextprotocol.io/docs/tools/debugging)\n\n### Debugging Authentication\n\n1. **Check your tokens/credentials** - Most auth failures are due to expired or incorrect tokens\n2. **Verify token permissions** - Some MCP servers require specific scopes (e.g., GitHub Copilot license)\n3. **Test with curl** - Try a simple HTTP request to verify your auth setup:\n\n   ```bash\n   curl -H \"Authorization: Bearer your-token\" https://api.example.com/mcp/\n   ```\n\n### LLM Provider Schema Compatibility\n\nDifferent LLM providers have incompatible JSON Schema requirements for function calling:\n\n- **OpenAI requires**: Optional fields must be nullable (`.optional()` + `.nullable()`)\n  for function calling (based on Structured Outputs API requirements,\n  strict enforcement coming in future SDK versions)\n- **Google Gemini API**: Rejects nullable fields and `$defs` references, requires strict OpenAPI 3.0 subset compliance\n- **Anthropic Claude** and **xAI Grok**: Very relaxed schema requirements with no documented restrictions\n\n**Note**: Google Vertex AI provides OpenAI-compatible endpoints that support more relaxed requirements.\n\n#### Real-World Impact\n\nThis creates challenges for developers trying to create universal schemas across providers.\n\nSome MCP servers generate schemas that don't satisfy all providers' requirements.  \nFor example, the official Notion local MCP server [@notionhq/notion-mcp-server](https://www.npmjs.com/package/@notionhq/notion-mcp-server) (version 1.9.0) and the remote server (at \"https://mcp.notion.com/mcp\", mcp-remote 0.1.18) produces:\n\n**OpenAI Warnings:**\n```\nZod field at `#/definitions/read_file/properties/tail` uses `.optional()` without `.nullable()` which is not supported by the API. See: https://platform.openai.com/docs/guides/structured-outputs?api-mode=responses#all-fields-must-be-required\n... followed by many more\n```\n\n**Gemini Errors:**\n```\n[GoogleGenerativeAI Error]: Error fetching from https://generativelanguage.googleapis.com/v1beta/models/gemini-2.5-flash:generateContent: [400 Bad Request] Invalid JSON payload received. Unknown name \"exclusiveMaximum\" at 'tools[0].function_declarations[14].parameters.properties[1].value': Cannot find field.\n... followed by many more\n```\n\n#### Solution\n\nThe new option, `llmProvider`, has been introduced for performing provider-specific JSON schema transformations:\n\n```typescript\nconst { tools, cleanup } = await convertMcpToLangchainTools(\n  mcpServers, {\n    llmProvider: \"openai\"        // Makes optional fields nullable\n    // llmProvider: \"google_gemini\" // Applies Gemini's strict validation rules  \n    // llmProvider: \"anthropic\"     // No transformations needed\n  }\n);\n```\n\n**Features:**\n- Generates INFO-level logs when transformations are applied\n- Helps users identify potential MCP server schema improvements\n- Falls back to original schema when no `llmProvider` is specified\n\n#### Provider-Specific Transformations\n\n| Provider | Transformations Applied |\n|----------|------------------------|\n| `openai` | Makes optional fields nullable, handles union types |\n| `google_gemini` or `google_genai` | Filters invalid required fields, fixes anyOf variants, removes unsupported features |\n| `anthropic` and `xai` | No transformations, but the schemas are handled slightly more efficiently |\n\nFor other providers, try without specifying the option:\n\n```typescript\nconst { tools, cleanup } = await convertMcpToLangchainTools(\n  mcpServers\n);\n```\n\n#### References\n\n- [OpenAI Function Calling](https://platform.openai.com/docs/guides/function-calling)\n- [Gemini API Schema Requirements](https://ai.google.dev/api/caching#Schema)\n- [Anthropic Tool Use](https://docs.anthropic.com/en/docs/agents-and-tools/tool-use/overview)\n\n### Debugging and Logging\n\nThe library provides configurable logging to help debug connection and tool execution issues:\n\n```ts\n// Configure log level\nconst { tools, cleanup } = await convertMcpToLangchainTools(\n  mcpServers, \n  { logLevel: \"debug\" }\n);\n\n// Use custom logger\nclass MyLogger implements McpToolsLogger {\n  debug(...args: unknown[]) { console.log(\"[DEBUG]\", ...args); }\n  info(...args: unknown[]) { console.log(\"[INFO]\", ...args); }\n  warn(...args: unknown[]) { console.warn(\"[WARN]\", ...args); }\n  error(...args: unknown[]) { console.error(\"[ERROR]\", ...args); }\n}\n\nconst { tools, cleanup } = await convertMcpToLangchainTools(\n  mcpServers,\n  { logger: new MyLogger() }\n);\n```\n\nAvailable log levels: `\"fatal\" | \"error\" | \"warn\" | \"info\" | \"debug\" | \"trace\"`\n\n### For Developers\n\nSee [./README_DEV.md](https://github.com/hideya/langchain-mcp-tools-ts/blob/main/README_DEV.md)\nfor more information about development and testing.\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fhideya%2Flangchain-mcp-tools-ts","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fhideya%2Flangchain-mcp-tools-ts","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fhideya%2Flangchain-mcp-tools-ts/lists"}