# Merge Vcf — MCP tool `findutils:merge_vcf`

Combine several .vcf vCard files into one importable file. Pass each file as { name, content }. Every complete BEGIN:VCARD … END:VCARD block is copied as written, so PHOTO, X- fields, the vCard version and the line endings survive untouched; cards appear in file order, then in order within each file, joined with the line ending of the first file (CRLF, LF or CR). With skip_duplicates (default true) a later card is dropped only when its name, its phone digits and its email addresses all equal an earlier card; there is no fuzzy name matching, and a card with no name, phone or email only matches an identical card. A card cut off before END:VCARD is refused and counted, and a file with no complete card is reported with an error while the rest still merge.

- Category: calculators
- MCP server: https://mcp.findutils.com/ (Streamable HTTP, no API keys, 120 req/min per IP)
- REST endpoint: POST https://api.findutils.com/api/tools/merge-vcf/execute (no API keys, 60 req/min per IP)
- Reference page: https://findutils.com/mcp/merge-vcf/
- Same tool on the other surface: https://findutils.com/api/merge-vcf/

## Connect

```bash
claude mcp add findutils --transport http https://mcp.findutils.com/
```

Claude Desktop (`claude_desktop_config.json`):

```json
{
  "mcpServers": {
    "findutils": {
      "url": "https://mcp.findutils.com/"
    }
  }
}
```

## Call the tool (verified example)

```bash
curl -X POST https://mcp.findutils.com/ \
  -H "Content-Type: application/json" \
  -d '{
    "jsonrpc": "2.0",
    "id": 1,
    "method": "tools/call",
    "params": {
      "name": "merge_vcf",
      "arguments": {
        "files": [
          {
            "name": "a.vcf",
            "content": "BEGIN:VCARD\r\nVERSION:3.0\r\nFN:Ada Lovelace\r\nEMAIL:ada@example.com\r\nEND:VCARD\r\n"
          },
          {
            "name": "b.vcf",
            "content": "BEGIN:VCARD\r\nVERSION:3.0\r\nFN:Grace Hopper\r\nEMAIL:grace@example.com\r\nEND:VCARD\r\n"
          }
        ]
      }
    }
  }'
```

## Input schema

| Argument | Type | Required | Description |
|---|---|---|---|
| `files` | array | yes | The .vcf files, in order, at most 500. Each item is { name, content }: the file name and its text. |
| `skip_duplicates` | boolean | no | Drop a later card whose name (trimmed, case-insensitive), phone digits and emails all match an earlier card. Default true. Default: `true`. |

Example arguments (verified):

```json
{
  "files": [
    {
      "name": "a.vcf",
      "content": "BEGIN:VCARD\r\nVERSION:3.0\r\nFN:Ada Lovelace\r\nEMAIL:ada@example.com\r\nEND:VCARD\r\n"
    },
    {
      "name": "b.vcf",
      "content": "BEGIN:VCARD\r\nVERSION:3.0\r\nFN:Grace Hopper\r\nEMAIL:grace@example.com\r\nEND:VCARD\r\n"
    }
  ]
}
```

## Also a REST endpoint

```bash
curl -X POST https://api.findutils.com/api/tools/merge-vcf/execute \
  -H "Content-Type: application/json" \
  -d '{
    "files": [
      {
        "name": "a.vcf",
        "content": "BEGIN:VCARD\r\nVERSION:3.0\r\nFN:Ada Lovelace\r\nEMAIL:ada@example.com\r\nEND:VCARD\r\n"
      },
      {
        "name": "b.vcf",
        "content": "BEGIN:VCARD\r\nVERSION:3.0\r\nFN:Grace Hopper\r\nEMAIL:grace@example.com\r\nEND:VCARD\r\n"
      }
    ]
  }'

# Parameter schema
curl https://api.findutils.com/api/tools/merge-vcf
```

Full REST reference: https://findutils.com/api/merge-vcf/ · OpenAPI 3.1 spec: https://findutils.com/api/openapi.json

---
Full catalog: POST https://mcp.findutils.com/ with method `tools/list` · https://findutils.com/mcp/ · https://findutils.com/llms.txt
