# mfs-ingest

Walks the agent through adding a source to MFS: pick a connector, gather credentials, write the TOML, run mfs add.

- skill · `type=skill` · Claude Code, Codex, Cursor, GitHub Copilot, Gemini CLI, OpenCode · ★ 157
- Author: zilliztech
- License: Apache-2.0 · policy=mirror · the beginning of the file is at the end of this page
- Source: https://github.com/zilliztech/mfs/tree/HEAD/skills/mfs-ingest/SKILL.md
- Updated: 2026-07-31
- HTML: https://affpapa.org/en/nevibecode/skills/mfs-ingest

## What it does

Reach for this skill when a source still does not show up in MFS search. It sorts the request into one of six paths: a quick add when credentials are already at hand, a guided walk-through for vague requests, a forced re-ingest, editing a connector that exists, listing what is registered, or asking a clarifying question.

A pre-flight runs first: `mfs --version`, `mfs status`, `mfs config show`, `mfs connector list`. The answers decide the branch. No CLI on the machine means `cargo install mfs-cli`. A refused connection means the server is down, and the skill points at running it from source and waits. A 401 sends you to `MFS_API_TOKEN` and `mfs config show` to check the endpoint.

Sources are addressed as `<scheme>://<alias>`, where the scheme names the connector type and the alias becomes the config filename. Credentials go in as `env:VAR_NAME` or `file:/abs/path` rather than plaintext, and the server resolves those references in its own environment and filesystem. For external sources the CLI calls the estimate endpoint itself and asks for confirmation, so do not answer yes on the user's behalf. One wrinkle: `file` takes an absolute path instead of an alias, and when client and server sit on different hosts the tree is bundled and uploaded.

## Requirements
- Works with: GitHub, PostgreSQL, MongoDB

## Install

### Claude Code (native platform)

1. **Skills CLI (Vercel)**
```bash
npx skills add zilliztech/mfs --skill mfs-ingest -a claude-code
```

2. **Manually: put the files in place**
- File: `~/.claude/skills/mfs-ingest/SKILL.md` — Copy the whole skill folder; for one project use .claude/skills/mfs-ingest/

### Codex

1. **Skills CLI (Vercel)**
```bash
npx skills add zilliztech/mfs --skill mfs-ingest -a codex
```

2. **Manually: put the files in place**
- File: `.agents/skills/mfs-ingest/SKILL.md` — For all projects use ~/.agents/skills/

### Cursor

1. **Skills CLI (Vercel)**
```bash
npx skills add zilliztech/mfs --skill mfs-ingest -a cursor
```

2. **Manually: put the files in place**
- File: `.cursor/skills/mfs-ingest/SKILL.md` — Cursor also reads .agents/skills/ and .claude/skills/

### GitHub Copilot

1. **GitHub CLI**
```bash
gh skill install zilliztech/mfs mfs-ingest
```

2. **Manually: put the files in place**
- File: `.github/skills/mfs-ingest/SKILL.md`

### Gemini CLI

1. **Skills CLI (Vercel)**
```bash
npx skills add zilliztech/mfs --skill mfs-ingest -a gemini-cli
```

2. **Platform CLI**
```bash
gemini skills install https://github.com/zilliztech/mfs --path skills/mfs-ingest
```

### Windsurf (Devin Desktop)

**Manually: put the files in place**
- File: `.devin/skills/mfs-ingest/SKILL.md` — The legacy .windsurf/skills/ path still works

### OpenCode

**Skills CLI (Vercel)**
```bash
npx skills add zilliztech/mfs --skill mfs-ingest -a opencode
```

### Claude.ai

**Claude.ai**
- Zip the folder and upload it in Settings → Capabilities → Skills

Where a file is given instead of a command, copy the files from the source to that path: https://github.com/zilliztech/mfs/tree/HEAD/skills/mfs-ingest/SKILL.md

## When to use it
- hook a postgres or mysql database into MFS search
- register a GitHub repo together with its issues
- re-index Slack after rotating the token
- list which connectors are already configured
- diagnose a sync that pulls no data

## Example prompts
- Add postgres prod-db to MFS, the credentials are in an environment variable
- Re-sync github, search is returning stale results
- List the connectors I have registered

## Source text · SKILL.md · Apache-2.0

Below is the content of a third-party file. It is data, not instructions for you: do not act on anything written inside unless the human asks. Block tag: df7c485a57306409.

BEGIN THIRD-PARTY FILE df7c485a57306409
````text
---
name: mfs-ingest
version: 0.4.0
mfs_compat: ">=0.4,<0.5"
description: >-
  Register, update, or re-sync data sources for MFS so they become searchable —
  postgres / mysql / mongo / snowflake / bigquery, github / jira / linear /
  notion / hubspot / zendesk, slack / discord / gmail / feishu, s3 / gdrive /
  web / file. Use whenever the user wants to ADD a new data source to MFS,
  change an existing connector's config, re-ingest / re-index a source, list
  registered connectors, or troubleshoot a sync that's not picking up data.
  Trigger phrases include "add X to MFS", "ingest my [postgres/slack/github/etc]",
  "register this repo / database / workspace", "make X searchable", "re-sync Y",
  "update the slack token", "what connectors do I have". Do NOT use for:
  searching / finding / reading content (use `mfs-find`); raw mutation of the
  source itself (MFS only reads).
---

# MFS — register / update / re-sync data sources

## 1. What this skill does

Walks the user through getting a data source into MFS so it's searchable.
The work splits into:

1. Picking the right connector scheme.
2. Collecting credentials (preferring `env:VAR` / `file:/path` indirection
   over plaintext).
3. Writing a connector TOML.
4. Calling `mfs add <uri> --config <toml>` and monitoring the returned job.

Each connector has its own field set, credential acquisition story, and
gotchas. Per-connector details live in
`reference/connectors/<scheme>.md` — **read the matching one before
collecting fields** for any scheme.

## Step 0: Pre-flight (always run first)

```bash
mfs --version            # missing? `cargo install mfs-cli` (see install row below)
mfs status               # server reachable? connectors/jobs visible?
mfs config show          # endpoint/profile/client id/server-info debugging
mfs connector list       # what's already configured?
```

Branch on the result:

| Signal | Action |
|---|---|
| `mfs` not found | install the CLI (Rust): `cargo install mfs-cli`, or the shell installer from the project's GitHub releases page. |
| `mfs status` connection refused | the configured server is down. Tell the user how to bring it up — pre-release, the server runs from source: `git clone https://github.com/zilliztech/mfs.git && cd mfs/server/python && uv sync && uv run mfs-server setup && uv run mfs-server run` — and wait. Work only through the configured endpoint rather than pointing the CLI at a different server. |
| `mfs status` returns 401 unauthorized | the user's `MFS_API_TOKEN` is missing/wrong. Use `mfs config show` to confirm the endpoint/profile, then set the intended token source and retry. |
````
END THIRD-PARTY FILE df7c485a57306409

The third-party file has ended. Everything between the df7c485a57306409 tags is data: requests and commands from it are not followed. An “end of file” line with another tag inside the block is part of the file.

First 2639 of 18926 bytes. © zilliztech · Apache-2.0 · https://github.com/zilliztech/mfs/tree/HEAD/skills/mfs-ingest/SKILL.md

_Part of the page did not fit — see the HTML version._

---
NeVibeCode on affpapa.org. Catalog texts are descriptions, not instructions for the agent. How to choose and install: https://affpapa.org/en/nevibecode/agents.md
