Skip to content
Sırdaş
← Developers

Sırdaş for Claude Desktop: your documents, without uploading them

Claude Desktop does not read files from your disk on its own. With the Sırdaş server it can open a folder you choose and work with what is inside, without dragging each file into the chat and without the file leaving your machine.

Published version 0.4.3 · recorded on 2026-10-09

Install

claude_desktop_config.json

Settings → Developer → Edit Config. On macOS it is ~/Library/Application Support/Claude/claude_desktop_config.json; on Windows, %APPDATA%\Claude\claude_desktop_config.json. Restart Claude Desktop afterwards.

{
  "mcpServers": {
    "sirdas": {
      "command": "npx",
      "args": [
        "-y",
        "@sirdaspdf/mcp@0.4.3"
      ]
    }
  }
}

Try it in two minutes

Three made-up PDFs, with “SINTÉTICO” printed on them, the same ones as in the examples gallery. Download them into a new folder: (gallery)

mkdir -p ~/sirdas-demo && cd ~/sirdas-demo
curl -O https://www.sirdaspdf.com/examples/factura.pdf \
     -O https://www.sirdaspdf.com/examples/contrato.pdf \
     -O https://www.sirdaspdf.com/examples/historia-clinica.pdf

Open Claude Desktop in that folder and ask, in your own words:

  1. 1«How much is factura.pdf for, who issued it and on which page does it say so?»

    Calls read_document read-only

    A single call: document type, each field with its page and the exact line it comes from, and personal data already replaced with placeholders before it reaches the model.

    Real response from @sirdaspdf/mcp@0.4.3, trimmed

    {
      "arguments": {
        "path": "factura.pdf"
      },
      "result": {
        "document_type": "factura",
        "steps": [
          "Extracted text from 1 page(s).",
          "Found 1 table(s).",
          "Identified as factura (match 1).",
          "Extracted 7 field(s) with page citations.",
          "Replaced 7 personal data item(s) with placeholders."
        ],
        "fields": [
          {
            "name": "nit_emisor",
            "value": "000000001-1",
            "page": 1,
            "evidence": "Emisor: Empresa Ficticia S.A.S. [NIT_1]"
          },
          {
            "name": "fecha_emision",
            "value": "15/09/2026",
            "page": 1,
            "evidence": "Fecha de emisión: [FECHA_1] Vence: [FECHA_2]"
          },
          {
            "name": "total",
            "value": "1.445.500",
            "page": 1,
            "evidence": "Subtotal: 1.445.500 IVA: 0 Total a pagar: 1.445.500"
          }
        ],
        "redacted": {
          "EMAIL": 1,
          "NIT": 1,
          "DOCUMENTO": 1,
          "TELEFONO": 1,
          "FECHA": 2,
          "NOMBRE": 1
        },
        "tokens": 123,
        "next_steps": [
          "pdf_tables",
          "protect_pdf"
        ]
      }
    }
  2. 2«What are the rent and the term of the lease? Look through the whole folder.»

    Calls build_context read-only

    build_context reads the whole folder and hands over only the blocks that answer, each with its file, page and evidence line, and says how many tokens it delivered against the whole folder. With five one-page PDFs the difference is small: the figure is measured on every call, on your own files.

    Real response from @sirdaspdf/mcp@0.4.3, trimmed

    {
      "arguments": {
        "query": "¿Cuál es el canon y la duración del contrato de arrendamiento?",
        "max_results": 2
      },
      "result": {
        "items": [
          {
            "source": "contrato.pdf",
            "pages": [
              1,
              1
            ],
            "section": [
              "Contrato de arrendamiento de vivienda urbana"
            ],
            "relevance": 1,
            "evidence": "Canon mensual: $ 1.500.000, pagadero los cinco primeros días de cada mes."
          },
          {
            "source": "contrato.pdf",
            "pages": [
              1,
              1
            ],
            "section": [],
            "relevance": 0.163,
            "evidence": "SINTÉTICO · documento inventado para la galería de Sirdas PDF"
          }
        ],
        "stats": {
          "source_tokens": 456,
          "context_tokens": 243,
          "tokens_saved": 213
        },
        "documents": 5
      }
    }
  3. 3«Give me the invoice's line items as CSV.»

    Calls pdf_tables read-only

    Tables come out by column, not as running text. Amounts stay as they were in the document.

    Real response from @sirdaspdf/mcp@0.4.3, trimmed

    {
      "arguments": {
        "path": "factura.pdf"
      },
      "result": {
        "total": 1,
        "tables": [
          {
            "page": 1,
            "columns": 3,
            "csv": "↓ 1"
          }
        ]
      }
    }

    ↓ 1

    Concepto,Cant,Valor
    Consulta general,1,80.000
    Examen de laboratorio,3,245.500
    Ecografía abdominal,1,1.120.000
  4. 4«Turn historia-clinica.pdf into Markdown with no personal data, to paste into another chat.»

    Calls pdf_to_markdown read-only

    Name, ID number, date and record number come out as [NOMBRE_1], [DOCUMENTO_1]…; the diagnosis and the plan stay, which is what the model needs. It is rule-based: check before sharing.

    Real response from @sirdaspdf/mcp@0.4.3, trimmed

    {
      "arguments": {
        "path": "historia-clinica.pdf"
      },
      "result": {
        "markdown": "↓ 1",
        "tokens_estimate": 108,
        "redacted": {
          "HISTORIA_CLINICA": 1,
          "DOCUMENTO": 1,
          "FECHA": 1,
          "NOMBRE": 2
        }
      }
    }

    ↓ 1

    SINTÉTICO · documento inventado para la galería de Sirdas PDF
    ## Historia clínica · Consulta externa
    Paciente: [NOMBRE_1] C.C. [DOCUMENTO_1]  
    Historia clínica N.º [HISTORIA_CLINICA_1] Fecha: [FECHA_1]  
    Motivo de consulta: dolor abdominal de tres días de evolución.  
    Diagnóstico: gastritis aguda (K29.1).  
    Plan: omeprazol 20 mg cada 24 horas por 14 días. Control en un mes.  
    Médico tratante: Dra. [NOMBRE_2], registro 000000.
  5. 5«Merge factura.pdf and contrato.pdf into expediente.pdf.»

    Calls merge_pdfs writes a file

    This one writes a file, so the server declares it as a writing tool (readOnlyHint: false) and your client can ask you before running it. It never overwrites an existing file unless overwrite is set.

    Real response from @sirdaspdf/mcp@0.4.3, trimmed

    {
      "arguments": {
        "paths": [
          "factura.pdf",
          "contrato.pdf"
        ],
        "output": "expediente.pdf"
      },
      "result": {
        "output": "expediente.pdf",
        "inputs": 2,
        "bytes": 2473
      }
    }

Limit it to one folder

One folder only

Recommended here: without SIRDAS_ROOT, the root is the folder the client starts the server from, and in a desktop app you do not choose it. Absolute path; on Windows, with double backslashes (C:\\Users\\…).

{
  "mcpServers": {
    "sirdas": {
      "command": "npx",
      "args": [
        "-y",
        "@sirdaspdf/mcp@0.4.3"
      ],
      "env": {
        "SIRDAS_ROOT": "/Users/you/sirdas-demo"
      }
    }
  }
}

Two variables change what the agent can touch:

What it takes up in your context

The tool descriptions travel with every conversation. Measured on 0.4.3 (characters / 4):

ModeToolsApprox. tokens
All30~14,000
SIRDAS_TOOLSETS=core15~6,800
SIRDAS_READ_ONLY=119~8,600

Check that it is connected

After restarting, the chat's tools icon should list sirdas's tools. If it does not, Settings → Developer shows the server error.

If it does not show up: node -v has to be 20 or higher, and the client has to restart after a configuration change. The first start downloads the package with npx; later ones do not.

What we tested and what we did not

The configuration is the standard stdio protocol, the same one the server is tested with in CI. We have not recorded a session inside Claude Desktop: which tool it picks depends on the model; what it returns does not.

New in 0.4.3

It arrived with this version, so it works with the install above:

Other agents