open-index/open-npm huggingface dataset:
npm package: @funnelstudio/mcp
Description: MCP server for FunnelStudio — clone websites, rewrite with AI, manage domains, generate ads, and more.
Author: FunnelStudio
Latest version: 1.0.1

# @funnelstudio/mcp

MCP server for [FunnelStudio](https://funnelstudio.com) — clone websites, rewrite with AI, manage domains, generate ads, and more.

## Quick Start

### Claude Desktop

Add to `~/.claude/claude_desktop_config.json`:

```json
{
  "mcpServers": {
    "funnelstudio": {
      "command": "npx",
      "args": ["@funnelstudio/mcp"]
    }
  }
}
```

### Cursor IDE

Add to `.cursor/mcp.json`:

```json
{
  "mcpServers": {
    "funnelstudio": {
      "command": "npx",
      "args": ["@funnelstudio/mcp"]
    }
  }
}
```

### Claude Code

```bash
claude mcp add funnelstudio -- npx @funnelstudio/mcp
```

## Authentication

On first use, ask Claude to log you in:

> "Log me into FunnelStudio with my-email@example.com"

Your token is saved locally at `~/.funnelstudio/mcp-token.json` and reused across sessions.

## What You Can Do

| Ask Claude... | What happens |
|--------------|--------------|
| "Clone stripe.com" | Clones the website to your account |
| "Rewrite my site for a dog food brand" | AI rewrites all text content |
| "Add a testimonials section" | Inserts new HTML section |
| "Apply stripe's branding to my site" | Extracts brand + generates matching CSS |
| "Generate ads from my landing page" | Creates AI ad creatives |
| "Add Google Analytics to my site" | Injects tracking script |
| "Connect mydomain.com" | Sets up custom domain with SSL |
| "How many credits do I have?" | Shows billing info |

## 76+ Tools Available

- **Sites**: Clone, list, edit, delete, export
- **Section Editor**: List sections, get/update/insert/remove HTML sections
- **Templates**: Convert to template, AI rewrite with 11-agent pipeline
- **Branding**: Extract brand kit, generate AI CSS, apply to sites
- **Ads**: Generate AI creatives, edit, regenerate
- **Content Rewrite**: Full-page AI rewrite with research context
- **Products**: Extract, manage, research
- **Domains**: Add, verify DNS, manage SSL, path mappings
- **A/B Testing**: Create tests, manage variants, view stats
- **Scripts**: Add tracking pixels, analytics, custom JS
- **Saved Elements**: Reusable HTML component library
- **AI Quick Edit**: Natural language element editing
- **Billing**: Credits, usage, subscription info

## Custom Server URL

If you're self-hosting FunnelStudio:

```json
{
  "mcpServers": {
    "funnelstudio": {
      "command": "npx",
      "args": ["@funnelstudio/mcp", "--url", "https://your-server.com/mcp"]
    }
  }
}
```

Or via environment variable:

```json
{
  "mcpServers": {
    "funnelstudio": {
      "command": "npx",
      "args": ["@funnelstudio/mcp"],
      "env": {
        "FUNNELSTUDIO_URL": "https://your-server.com/mcp"
      }
    }
  }
}
```

## Requirements

- Node.js 18+
- A FunnelStudio account ([sign up](https://funnelstudio.com))
npm package: @funny-ui/icons
Description: Icons of @funny-ui
Author: zhonghui
Latest version: 0.0.1

### funny-icon

> 项目很大程度参考`@varlet/icons`，使用`webfont`把 svg 图标生成字体文件。

#### 使用方法

1. 使用`npm run updateSvg`更新新加入的 svg 文件的名称

```
npm run updateSvg
```

2. 连接当前库到 npm 并构建生成字体库

```
npm link or sudo npm link

npm run build
```

3. 更新`package.json`的各个属性，发布到 npm

```
npm publish
```
npm package: @funnyaibox/openclaw-matrixcraft-channel
Description: MatrixCraft content workbench integration for OpenClaw
Latest version: 0.4.0

# MatrixCraft Channel Plugin for OpenClaw

Connects OpenClaw to MatrixCraft Server via WebSocket, enabling:

- **Topic Channel protocol** — Server dispatches tasks; OpenClaw executes and reports results
- **App 凭证认证** — 用 App ID + Secret 连接，支持多设备

## Setup

```bash
# 1. 安装插件
openclaw plugin install @funnyaibox/openclaw-matrixcraft-channel

# 2. 配置（输入在 App 中创建的 App ID 和 Secret）
openclaw channel setup matrixcraft

# 3. 启动
openclaw start
```

### 获取 App 凭证

在 MatrixCraft App → 设置 → 创建 App 凭证，输入名称（如"Mac Mini 办公室"）。
系统返回 `app_id` 和 `app_secret`，**secret 仅显示一次**。

每个 OpenClaw 实例使用独立的凭证，支持同一账号接入多个设备。

## Protocol

All communication uses JSON over WebSocket at `wss://api.matrixcraft.app/api/v1/channel`.

### Server → Bot (topic_dispatch)
```json
{"event": "topic_dispatch", "topic": "content/process", "request_id": "uuid", "payload": {...}}
```

### Bot → Server (topic_publish)
```json
{"event": "topic_publish", "topic": "content/result", "request_id": "uuid", "payload": {...}}
```
npm package: @funnyfoo/create-reducer-redux
Description: A redux reducer generate function
Author: cesar2535
Latest version: 1.4.0

# create-reducer-redux

[![build status](https://img.shields.io/circleci/project/github/FunnyFoo/create-reducer-redux.svg?style=flat-square)](https://circleci.com/gh/FunnyFoo/create-reducer-redux)
[![npm version](https://img.shields.io/npm/v/@funnyfoo/create-reducer-redux.svg?style=flat-square)](https://www.npmjs.com/package/@funnyfoo/create-reducer-redux)
[![license](https://img.shields.io/npm/l/@funnyfoo/create-reducer-redux.svg?style=flat-square)](https://github.com/FunnyFoo/create-reducer-redux/blob/master/LICENSE)
[![dependencies status](https://david-dm.org/funnyfoo/create-reducer-redux.svg?style=flat-square)](https://david-dm.org/funnyfoo/create-reducer-redux)

A redux reducer using the tuple like `[ type, handler ]` instead of `switch` statement.

## Install
```bash
npm install --save @funnyfoo/create-reducer-redux
# or
yarn add @funnyfoo/create-reducer-redux
```

## Usage
```js
import createReducer from '@funnyfoo/create-reducer-redux'

const Types = {
  INCREMENT: 'INCREMENT',
  DECREMENT: 'DECREMENT',
  ADDITION: 'ADDITION'
}

const increment = function() {
  return {
    type: Types.INCREMENT,
  }
}

const decrement = function() {
  return {
    type: Types.DECREMENT,
  }
}

const addX = function(x) {
  return {
    type: Types.ADDITION,
    payload: x
  }
}

const inc = x => x + 1
const dec = x => x - 1

const initialState = 0

const reducer = createReducer([
  [ Types.INCREMENT, inc ],
  [ Types.DECREMENT, dec ],
  [ Types.ADDITION, (state, action) => state + action.payload ],
], initialState)

let state;
state = reducer(state, addX(12))  // => 12
state = reducer(state, decrement())  // => 11
state = reducer(state, { type: 'other' })  // => 11

```

## API

### `createReducer(pairs, initialState)`
Create a redux reducer with the initial state and a list of tuple of action type and handler

#### Arguments
`{Array}` `pairs`: A list of [ `ActionType`, `Handler` ], `Handler` is a function with the two arguments `state`, `action`.

`{Any}` `initialState`: the initial state for the reducer

#### Returns
`{Function}`: returns a function with two arguments `state`, `action`