Skip to content
reaatechREAATECH

@reaatech/multi-tenant-mcp-tool-visibility

npm v0.1.0

Provides a `VisibilityEngineImpl` class to restrict access to Model Context Protocol (MCP) tools, resources, and prompts based on tenant-specific allow-lists, deny-lists, or custom dynamic evaluation functions. It exposes a boolean `isVisible` method to filter MCP entities at runtime.

@reaatech/multi-tenant-mcp-tool-visibility

npm version License: MIT CI

Status: Pre-1.0 — APIs may change in minor versions. Pin to a specific version in production.

Control which MCP tools, resources, and prompts each tenant can access. Supports allow-list, deny-list, and dynamic policy evaluation.

Installation

terminal
npm install @reaatech/multi-tenant-mcp-tool-visibility
# or
pnpm add @reaatech/multi-tenant-mcp-tool-visibility

Feature Overview

  • Three policy typesallow (whitelist), deny (blacklist), and dynamic (runtime evaluator function).
  • Unified API — Same engine for tools, resources, and prompts; each dimension receives its own independent policy map.
  • Default-deny — When no policy is configured for a tenant, all items are visible. When an allow-list exists but doesn’t list the item, access is denied.

Quick Start

typescript
import { VisibilityEngineImpl } from '@reaatech/multi-tenant-mcp-tool-visibility';
 
const engine = new VisibilityEngineImpl({
  'tenant-a': { type: 'allow', items: ['echo', 'status'] },
  'tenant-b': { type: 'deny', items: ['admin-delete'] },
  'tenant-c': {
    type: 'dynamic',
    evaluator: (itemName, tenantId) => itemName.startsWith(`${tenantId}:`),
  },
});
 
engine.isVisible('echo', 'tenant-a'); // true (in allow-list)
engine.isVisible('admin-delete', 'tenant-a'); // false (not in allow-list)
engine.isVisible('echo', 'tenant-b'); // true (not in deny-list)
engine.isVisible('admin-delete', 'tenant-b'); // false (in deny-list)
engine.isVisible('tenant-c:my-tool', 'tenant-c'); // true (dynamic match)

Exports

ExportKindDescription
VisibilityEngineInterfaceisVisible(itemName, tenantId) → boolean
VisibilityPolicyType{ type: 'allow' | 'deny' | 'dynamic', items?, evaluator? }
VisibilityEngineImplClassDefault implementation with allow-list, deny-list, and dynamic evaluation

Visibility Policy Types

PolicyBehaviour
{ type: 'allow', items: [...] }Only listed items are visible; everything else is denied
{ type: 'deny', items: [...] }All items are visible except the listed ones
{ type: 'dynamic', evaluator: fn }The evaluator function is called for every visibility check

License

MIT