npm package discovery and stats viewer.

Discover Tips

  • General search

    [free text search, go nuts!]

  • Package details

    pkg:[package-name]

  • User packages

    @[username]

Sponsor

Optimize Toolset

I’ve always been into building performant and accessible sites, but lately I’ve been taking it extremely seriously. So much so that I’ve been building a tool to help me optimize and monitor the sites that I build to make sure that I’m making an attempt to offer the best experience to those who visit them. If you’re into performant, accessible and SEO friendly sites, you might like it too! You can check it out at Optimize Toolset.

About

Hi, 👋, I’m Ryan Hefner  and I built this site for me, and you! The goal of this site was to provide an easy way for me to check the stats on my npm packages, both for prioritizing issues and updates, and to give me a little kick in the pants to keep up on stuff.

As I was building it, I realized that I was actually using the tool to build the tool, and figured I might as well put this out there and hopefully others will find it to be a fast and useful way to search and browse npm packages as I have.

If you’re interested in other things I’m working on, follow me on Twitter or check out the open source projects I’ve been publishing on GitHub.

I am also working on a Twitter bot for this site to tweet the most popular, newest, random packages from npm. Please follow that account now and it will start sending out packages soon–ish.

Open Software & Tools

This site wouldn’t be possible without the immense generosity and tireless efforts from the people who make contributions to the world and share their work via open source initiatives. Thank you 🙏

© 2026 – Pkg Stats / Ryan Hefner

mcp-manager

v0.0.1

Published

A manager for Model Context Protocol services.

Readme

mcp-manager

mcp-manager 是一个用于管理多个服务实例的工具,支持 Web 和桌面环境。它提供了动态存储适配器、服务生命周期管理以及工具、资源和提示的同步功能。

功能特性

  • 支持 Web 和桌面环境的存储适配器(BrowserStorageFileSystemStorage)。
  • 动态选择传输层(WebSocket 或 Stdio)。
  • 服务的创建、启用、禁用和重启功能。
  • 工具、资源和提示的同步与管理。
  • OpenAI 集成,支持生成 OpenAI 工具格式。

安装依赖

bun add mcp-manager

使用说明

  1. 创建服务 使用 createService 方法创建新的服务实例,并指定传输类型(websocketstdio)。

  2. 管理服务 使用 enableServicedisableService 方法启用或禁用服务。

  3. 存储适配器 根据运行环境自动选择 BrowserStorage(Web 环境)或 FileSystemStorage(桌面环境)。

  4. OpenAI 工具 调用 getAllEnabledServicesOpenAITools 方法获取所有启用服务的 OpenAI 工具。

前端示例

以下是一些使用 mcp-manager 在 React 应用中的示例,展示了如何结合 React 的状态管理来动态管理服务和存储。

示例 1:React 中的服务管理

import React, { useEffect, useState } from "react";
import { createService, ServiceManager, BrowserStorage } from "mcp-manager";

const serviceManager = new ServiceManager(new BrowserStorage());

export function ServiceDashboard() {
  const [services, setServices] = useState<string[]>([]);
  const [enabledServices, setEnabledServices] = useState<string[]>([]);

  useEffect(() => {
    // 初始化服务管理器
    serviceManager.createService("WebSocketService", "websocket", {
      url: "ws://localhost:8080",
    });

    // 监听服务事件
    const handleServiceConnected = (serviceName: string) => {
      setServices((prev) => [...prev, serviceName]);
    };

    const handleServiceEnabled = (serviceName: string) => {
      setEnabledServices((prev) => [...prev, serviceName]);
    };

    serviceManager.on("serviceConnected", handleServiceConnected);
    serviceManager.on("serviceEnabled", handleServiceEnabled);

    return () => {
      serviceManager.off("serviceConnected", handleServiceConnected);
      serviceManager.off("serviceEnabled", handleServiceEnabled);
    };
  }, []);

  const handleEnableService = (serviceName: string) => {
    serviceManager.enableService(serviceName);
  };

  return (
    <div>
      <h2>服务列表</h2>
      <ul>
        {services.map((serviceName) => (
          <li key={serviceName}>
            {serviceName}{" "}
            <button onClick={() => handleEnableService(serviceName)}>
              启用
            </button>
          </li>
        ))}
      </ul>

      <h2>已启用服务</h2>
      <ul>
        {enabledServices.map((serviceName) => (
          <li key={serviceName}>{serviceName}</li>
        ))}
      </ul>
    </div>
  );
}

示例 2:React 中的 OpenAI 工具集成

import React, { useEffect, useState } from "react";
import { ServiceManager, BrowserStorage } from "mcp-manager";

const serviceManager = new ServiceManager(new BrowserStorage());

export function OpenAITools() {
  const [tools, setTools] = useState<any[]>([]);

  useEffect(() => {
    // 创建并启用服务
    serviceManager.createService("WebSocketService", "websocket", {
      url: "ws://localhost:8080",
    });
    serviceManager.enableService("WebSocketService");

    // 获取所有启用服务的 OpenAI 工具
    const openAITools = serviceManager.getAllEnabledServicesOpenAITools();
    setTools(openAITools);
  }, []);

  return (
    <div>
      <h2>OpenAI 工具列表</h2>
      <ul>
        {tools.map((tool, index) => (
          <li key={index}>
            <strong>{tool.function.name}</strong>: {tool.function.description}
          </li>
        ))}
      </ul>
    </div>
  );
}

示例 3:React 状态与存储适配器结合

import React, { useEffect, useState } from "react";
import { ServiceManager, BrowserStorage } from "mcp-manager";

const storage = new BrowserStorage();
const serviceManager = new ServiceManager(storage);

export function StorageExample() {
  const [data, setData] = useState<string | null>(null);

  useEffect(() => {
    // 加载存储的数据
    const loadData = async () => {
      const savedData = await storage.load("exampleKey");
      setData(savedData || "无数据");
    };

    loadData();
  }, []);

  const handleSaveData = async () => {
    const newData = `保存时间: ${new Date().toISOString()}`;
    await storage.save("exampleKey", newData);
    setData(newData);
  };

  return (
    <div>
      <h2>存储示例</h2>
      <p>当前数据: {data}</p>
      <button onClick={handleSaveData}>保存新数据</button>
    </div>
  );
}

技术栈

  • Bun:快速的 JavaScript 运行时。
  • EventEmitter:事件驱动架构。
  • Ajv:JSON Schema 验证。
  • Node.js 模块fs/promisespath 用于桌面环境存储。

此项目使用 Bun v1.2.2 创建。Bun 是一个快速的全栈 JavaScript 运行时。