Skip to content
PluginStats

@lushly-dev/afd-client weekly downloads statistics

By lushly-dev (4 listings) · npm · MCP servers

MCP client library for Agent-First Development

View on npm Fresh · Oct 18, 2026

@lushly-dev/afd-client has 21,744 recorded weekly downloads on npm, an increase of 261% over the past 30 days, ranking #769 of 2,322 tracked listings.

Weekly downloads
21,744
Official API · Oct 18, 2026
7-day growth
+69.0%
+8.9K weekly downloads
30-day growth
+261%
+15.7K weekly downloads
90-day growth
+5309%
+21.3K weekly downloads
Rank
#769
Among tracked npm listings

About @lushly-dev/afd-client

@lushly-dev/afd-client

MCP client library for Agent-First Development.

Installation

npm install @lushly-dev/afd-client
# or
pnpm add @lushly-dev/afd-client

Overview

This package provides clients for AFD command servers. It supports:

  • SSE Transport: Real-time streaming with Server-Sent Events
  • HTTP Transport: Simple request/response communication
  • Direct Transport: Zero-overhead in-process execution for co-located agents
  • Auto-reconnection: Exponential backoff with jitter and a cap
  • Type-safe API: Full TypeScript support with CommandResult integration
Supported servers

McpClient talks to AFD servers: createMcpServer() from @lushly-dev/afd-server (and the AFD Python server), through their HTTP transport:

RouteUsed for
GET <base>/sseEvent stream of the sse transport
POST <base>/messageJSON-RPC requests (initialize, tools/list, tools/call)
GET <base>/healthReachability check on connect (http transport)
POST <base>/stream/<command>stream()

McpClient is not a general MCP client. It does not implement the MCP Streamable HTTP transport (the Accept: application/json, text/event-stream negotiation and its session handling), and it ignores the endpoint event of the legacy MCP SSE transport. Servers built on the official MCP SDK answer it with HTTP 406 or 400. To talk to those servers, use the official @modelcontextprotocol/sdk client.

Usage

Basic Connection
import { createClient } from '@lushly-dev/afd-client';

// Create client
const client = createClient({
  url: 'http://localhost:3100/sse',
  transport: 'sse', // or 'http'
});

// Connect
await client.connect();

// List available tools
const tools = await client.listTools();
console.log('Available tools:', tools.map(t => t.name));

// Disconnect when done
await client.disconnect();
Calling Commands
import { createClient, type CommandResult } from '@lushly-dev/afd-client';
import { isSuccess, isFailure } from '@lushly-dev/afd-core';

const client = createClient({ url: 'http://localhost:3100/sse' });
await client.connect();

// Call a command - returns CommandResult
const result = await client.call<Document>('document-create', {
  title: 'My Document',
  content: 'Hello, world!'
});

if (isSuccess(result)) {
  console.log('Created document:', result.data);
  console.log('Confidence:', result.confidence);
  console.log('Reasoning:', result.reasoning);
} else {
  console.error('Error:', result.error.message);
  console.error('Suggestion:', result.error.suggestion);
}

Pass per-request deadlines and cancellation to call(), callTool(), or request():

const result = await client.call('item-get', { id: '123' }, {
  timeout: 5_000,
  signal: controller.signal,
});

With the direct transport, deadlines and cancellation settle the request even when a handler ignores its abort signal. Disconnecting also aborts active execution. A handler that has already started may still complete its side effects; check a mutation's effect before retrying. Direct discovery preserves the registry's input schema and planning metadata. HTTP and SSE session renewal requires a successful JSON-RPC initialize result and a replacement session ID before replaying a rejected request. Concurrent requests share renewal work.

Event Handling
const client = createClient({
  url: 'http://localhost:3100/sse',
  autoReconnect: true,
  maxReconnectAttempts: 5,
});

// Subscribe to events
client.on('connected', (info) => {
  console.log('Connected to:', info.serverInfo.name);
});

client.on('disconnected', (reason) => {
  console.log('Disconnected:', reason);
});

client.on('reconnecting', (attempt, max) => {
  console.log(`Reconnecting... (${attempt}/${max})`);
});

client.on('error', (error) => {
  console.error('Client error:', error);
});

client.on('toolsChanged', (tools) => {
  console.log('Tools updated:', tools.length);
});

await client.connect();
  • connected fires once the server is initialized and the tools list is loaded, so client.getTools() is ready inside the handler. A failed tools refresh does not fail the connection; the list stays empty.
  • While reconnecting, each attempt emits reconnecting; failed attempts emit nothing else. If every attempt fails, the client emits one error ("Max reconnection attempts reached", with the last failure as cause) and moves to the error state.
  • The delay before attempt n is reconnectDelay * 2^(n-1) plus up to 100 ms of jitter, capped at maxReconnectDelay.
  • The sse transport notices a closed event stream. The http transport has no persistent connection, so it reports the connection as lost after 3 consecutive requests get no HTTP response at all; autoReconnect then applies to it too.
Client Status
const status = client.getStatus();

console.log('State:', status.state);
console.log('Server:', status.serverInfo?.name);
console.log('Connected at:', status.connectedAt);
console.log('Pending requests:', status.pendingRequests);
Raw Tool Calls

For low-level access, use callTool which returns the raw MCP response:

// Raw MCP response
const rawResult = await client.callTool('document-create', {
  title: 'Test'
});

console.log('Content:', rawResult.content);
console.log('Is error:', rawResult.isError);

callTool() and request() take an optional { timeout } that overrides the client timeout for that request. They throw NotConnectedError, RequestTimeoutError, JsonRpcResponseError (with the JSON-RPC code and data) or HttpStatusError; call(), batch(), pipe() and stream() never throw and return these as failures instead.

Batches and Pipelines…

Description from the npm listing.

  • afd
  • mcp
  • ai-agents
  • sse
  • client

README badge

Show your rank in a README or on your website. The badge updates automatically.

Charts

Images: 30d · 1y · all time · 1600×900 dark

Adoption over time

@lushly-dev/afd-client weekly downloads on npm, last 90 days: 21,744 weekly downloads as of Oct 18, 2026, +5309% over 90 days.@lushly-dev/afd-clientWeekly downloads on npm · Last 90 days21,744downloads / week+5309% over 90 days010K20K30K40K50KJul 20Aug 4Aug 19Sep 3Sep 18Oct 3Oct 18downloads / weekobservedarchived (Internet Archive)no observationsJul 22, 2026 – Oct 18, 2026 · 89 observations · Updated Oc…pluginstats.com
@lushly-dev/afd-client weekly downloads on npm, last 90 days: 21,744 weekly downloads as of Oct 18, 2026, +5309% over 90 days.

7/30/90-day growth

@lushly-dev/afd-client weekly downloads growth on npm: +69.0% over 7 days, +261% over 30 days, +5309% over 90 days.@lushly-dev/afd-clientWeekly downloads growth on npm21,744downloads / week now7-day growth+8,874 weekly downloads+69.0%30-day growth+15,713 weekly downloads+261%90-day growth+21,342 weekly downloads+5309%Growth vs. nearest observation to each baseline date · Updated Oct 18, 2026pluginstats.com
@lushly-dev/afd-client weekly downloads growth on npm: +69.0% over 7 days, +261% over 30 days, +5309% over 90 days.

Ranking history

@lushly-dev/afd-client npm ranking history: currently #769 (by weekly downloads).@lushly-dev/afd-clientnpm ranking · by weekly downloads · Last 90 days#769current rank#200#300#400#500#600#700#800#900Jul 22Aug 6Aug 21Sep 5Sep 20Oct 5Oct 20rankOct 17, 2026 – Oct 20, 2026 · 4 observations · Updated Oct 18, 2026pluginstats.com
@lushly-dev/afd-client npm ranking history: currently #769 (by weekly downloads).

Listing placement

All npm2,320 listings · 116 pages · 1,162 shown · page 39, #10 (overall #770)
All npm: every listing in weekly downloads order

Listing placement

MCP servers277 listings · 14 pages · page 6, #12 (overall #112)
MCP servers: every listing in weekly downloads order

Filled points are observed values; hollow points come from Internet Archive snapshots of the listing page. Dashed segments span periods with no observations — values between points are not interpolated.

Each band is one page of 20. Weekly downloads on a linear scale. Placement is projected from weekly downloads, so it can differ from the marketplace's own sort order. Hover a dot to see the listing.

Recent observations

Full history (544)
Recent weekly downloads observations for @lushly-dev/afd-client
Date (UTC)Weekly downloadsChange vs. previous
21,744+5.5K
16,259-4.7K
20,965+7.6K
13,370-2.5K
15,912-1.8K
17,6960
17,696+4.8K
12,870-300
13,170+1.6K
11,523-1.5K
13,056+392
12,664-961
13,625-3.8K
17,458—

Similar npm MCP servers plugins

All 20 @lushly-dev/afd-client alternatives

Data source

Weekly downloads (trailing 7 complete days) come from the official npm downloads API. Downloads include CI and mirrors and are not equivalent to installs or users. npm publishes no ratings.

Listing: https://www.npmjs.com/package/@lushly-dev/afd-client. First seen Oct 16, 2026; last successful collection Oct 20, 2026. See the methodology.