{
  "slug": "filesystem-reference",
  "name": "Filesystem (reference)",
  "author": "MCP steering group",
  "category": "Reference servers",
  "tier": "checkable",
  "kind": "stdio",
  "packageSpec": "npm:@modelcontextprotocol/server-filesystem@2.1.0",
  "sourceUrl": "https://github.com/modelcontextprotocol/servers/tree/main/src/filesystem",
  "repoUrl": "https://github.com/modelcontextprotocol/servers",
  "enrichment": {},
  "current": {
    "verdict": "alive",
    "reason": "all_passed",
    "failedChecks": [],
    "untestedTools": 9,
    "checkedAt": "2026-10-29T06:53:20.168Z",
    "methodologyVersion": "1.0.0",
    "serverVersion": "2.1.0",
    "checks": [
      {
        "id": "L0.reachable",
        "detail": "http undefined",
        "status": "pass",
        "durationMs": 22556
      },
      {
        "id": "L0.tls",
        "status": "skipped"
      },
      {
        "id": "L0.initialize",
        "status": "pass",
        "evidence": {
          "raw": "{\"result\":{\"protocolVersion\":\"2025-11-25\",\"capabilities\":{\"tools\":{\"listChanged\":true}},\"serverInfo\":{\"name\":\"secure-filesystem-server\",\"version\":\"2.1.0\"}},\"jsonrpc\":\"2.0\",\"id\":1}"
        },
        "durationMs": 22556
      },
      {
        "id": "L0.protocol_version",
        "detail": "server reported \"2025-11-25\"; published versions: 2024-11-05, 2025-03-26, 2025-06-18, 2025-11-25",
        "status": "pass"
      },
      {
        "id": "L0.capabilities",
        "detail": "tools",
        "status": "pass"
      },
      {
        "id": "L1.server_info",
        "detail": "secure-filesystem-server 2.1.0",
        "status": "pass"
      },
      {
        "id": "L1.tools_list",
        "detail": "14 tools",
        "status": "pass"
      },
      {
        "id": "L1.tool_schemas",
        "detail": "14 schemas valid",
        "status": "pass"
      },
      {
        "id": "L1.resources_list",
        "detail": "resources capability not declared",
        "status": "skipped"
      },
      {
        "id": "L1.prompts_list",
        "detail": "prompts capability not declared",
        "status": "skipped"
      },
      {
        "id": "L1.unknown_method",
        "status": "pass",
        "evidence": {
          "raw": "{\"jsonrpc\":\"2.0\",\"id\":3,\"error\":{\"code\":-32601,\"message\":\"Method not found\"}}"
        },
        "durationMs": 8
      },
      {
        "id": "L1.envelope",
        "detail": "3 replies valid",
        "status": "pass"
      },
      {
        "id": "L2.call_ok",
        "tool": "create_directory",
        "detail": "mutation_name",
        "status": "untested"
      },
      {
        "id": "L2.call_ok",
        "tool": "directory_tree",
        "status": "pass",
        "evidence": {
          "raw": "{\"result\":{\"content\":[{\"type\":\"text\",\"text\":\"ENOENT: no such file or directory, scandir '/tmp/knot-verified-probe'\"}],\"isError\":true},\"jsonrpc\":\"2.0\",\"id\":4}",
          "arguments": {
            "path": "knot-verified-probe"
          }
        },
        "durationMs": 97
      },
      {
        "id": "L2.output_schema",
        "tool": "directory_tree",
        "detail": "tool reported isError",
        "status": "skipped"
      },
      {
        "id": "L2.bad_input",
        "tool": "directory_tree",
        "status": "pass",
        "evidence": {
          "raw": "{\"result\":{\"content\":[{\"type\":\"text\",\"text\":\"Input validation error: Invalid arguments for tool directory_tree: path: Invalid input: expected string, received undefined\"}],\"isError\":true},\"jsonrpc\":\"2.0\",\"id\":5}",
          "arguments": {}
        },
        "durationMs": 14
      },
      {
        "id": "L2.call_ok",
        "tool": "edit_file",
        "detail": "mutation_name",
        "status": "untested"
      },
      {
        "id": "L2.call_ok",
        "tool": "get_file_info",
        "status": "pass",
        "evidence": {
          "raw": "{\"result\":{\"content\":[{\"type\":\"text\",\"text\":\"ENOENT: no such file or directory, stat '/tmp/knot-verified-probe'\"}],\"isError\":true},\"jsonrpc\":\"2.0\",\"id\":6}",
          "arguments": {
            "path": "knot-verified-probe"
          }
        },
        "durationMs": 32
      },
      {
        "id": "L2.output_schema",
        "tool": "get_file_info",
        "detail": "tool reported isError",
        "status": "skipped"
      },
      {
        "id": "L2.bad_input",
        "tool": "get_file_info",
        "status": "pass",
        "evidence": {
          "raw": "{\"result\":{\"content\":[{\"type\":\"text\",\"text\":\"Input validation error: Invalid arguments for tool get_file_info: path: Invalid input: expected string, received undefined\"}],\"isError\":true},\"jsonrpc\":\"2.0\",\"id\":7}",
          "arguments": {}
        },
        "durationMs": 12
      },
      {
        "id": "L2.call_ok",
        "tool": "list_allowed_directories",
        "status": "pass",
        "evidence": {
          "raw": "{\"result\":{\"content\":[{\"type\":\"text\",\"text\":\"Allowed directories:\\n/tmp\"}],\"structuredContent\":{\"content\":\"Allowed directories:\\n/tmp\"}},\"jsonrpc\":\"2.0\",\"id\":8}",
          "arguments": {}
        },
        "durationMs": 33
      },
      {
        "id": "L2.output_schema",
        "tool": "list_allowed_directories",
        "status": "pass"
      },
      {
        "id": "L2.bad_input",
        "tool": "list_allowed_directories",
        "detail": "no schema violation can be crafted",
        "status": "skipped"
      },
      {
        "id": "L2.call_ok",
        "tool": "list_directory",
        "status": "pass",
        "evidence": {
          "raw": "{\"result\":{\"content\":[{\"type\":\"text\",\"text\":\"ENOENT: no such file or directory, scandir '/tmp/knot-verified-probe'\"}],\"isError\":true},\"jsonrpc\":\"2.0\",\"id\":9}",
          "arguments": {
            "path": "knot-verified-probe"
          }
        },
        "durationMs": 36
      },
      {
        "id": "L2.output_schema",
        "tool": "list_directory",
        "detail": "tool reported isError",
        "status": "skipped"
      },
      {
        "id": "L2.bad_input",
        "tool": "list_directory",
        "status": "pass",
        "evidence": {
          "raw": "{\"result\":{\"content\":[{\"type\":\"text\",\"text\":\"Input validation error: Invalid arguments for tool list_directory: path: Invalid input: expected string, received undefined\"}],\"isError\":true},\"jsonrpc\":\"2.0\",\"id\":10}",
          "arguments": {}
        },
        "durationMs": 19
      },
      {
        "id": "L2.call_ok",
        "tool": "list_directory_with_sizes",
        "status": "pass",
        "evidence": {
          "raw": "{\"result\":{\"content\":[{\"type\":\"text\",\"text\":\"ENOENT: no such file or directory, scandir '/tmp/knot-verified-probe'\"}],\"isError\":true},\"jsonrpc\":\"2.0\",\"id\":11}",
          "arguments": {
            "path": "knot-verified-probe"
          }
        },
        "durationMs": 26
      },
      {
        "id": "L2.output_schema",
        "tool": "list_directory_with_sizes",
        "detail": "tool reported isError",
        "status": "skipped"
      },
      {
        "id": "L2.bad_input",
        "tool": "list_directory_with_sizes",
        "status": "pass",
        "evidence": {
          "raw": "{\"result\":{\"content\":[{\"type\":\"text\",\"text\":\"Input validation error: Invalid arguments for tool list_directory_with_sizes: path: Invalid input: expected string, received undefined\"}],\"isError\":true},\"jsonrpc\":\"2.0\",\"id\":12}",
          "arguments": {}
        },
        "durationMs": 15
      },
      {
        "id": "L2.call_ok",
        "tool": "move_file",
        "detail": "mutation_name",
        "status": "untested"
      },
      {
        "id": "L2.call_ok",
        "tool": "read_file",
        "detail": "per_run_cap",
        "status": "untested"
      },
      {
        "id": "L2.call_ok",
        "tool": "read_media_file",
        "detail": "per_run_cap",
        "status": "untested"
      },
      {
        "id": "L2.call_ok",
        "tool": "read_multiple_files",
        "detail": "per_run_cap",
        "status": "untested"
      },
      {
        "id": "L2.call_ok",
        "tool": "read_text_file",
        "detail": "per_run_cap",
        "status": "untested"
      },
      {
        "id": "L2.call_ok",
        "tool": "search_files",
        "detail": "per_run_cap",
        "status": "untested"
      },
      {
        "id": "L2.call_ok",
        "tool": "write_file",
        "detail": "mutation_name",
        "status": "untested"
      },
      {
        "id": "L2.timeout",
        "detail": "5 calls answered within 30000 ms",
        "status": "pass"
      }
    ],
    "metrics": {
      "callMs": [
        97,
        14,
        32,
        12,
        33,
        36,
        19,
        26,
        15
      ],
      "toolsListMs": 137,
      "initializeMs": 22556
    },
    "facts": {
      "authModel": "none",
      "transport": "stdio",
      "capabilities": [
        "tools"
      ],
      "toolAnnotations": {
        "readOnly": 10,
        "unmarked": 1,
        "destructive": 3
      },
      "credentialsInUrl": false
    }
  },
  "l3": {
    "uptime": {
      "24h": null,
      "7d": 1,
      "30d": 1
    },
    "sampleSize": {
      "24h": 0,
      "7d": 1,
      "30d": 1
    },
    "latency": {
      "initialize": {
        "p50": null,
        "p95": null
      },
      "calls": {
        "p50": 26,
        "p95": 97
      }
    },
    "flakiness": null,
    "versionDrift": []
  },
  "history": [
    {
      "startedAt": "2026-10-29T06:52:57.085Z",
      "runKind": "full",
      "l0Ok": true,
      "verdict": "alive"
    }
  ]
}