DPOLens

Privacy law your AI assistant can cite: the exact clause and its version. GDPR and UAE PDPL today.

我该使用它吗

质量与安全性

A
描述质量
95%
模式完整度
90%
命名质量
100%
投毒风险
100%
权限匹配度
100%
协议合规性
100%

基于对工具定义和协议合规性的自动分析。

上下文开销

~3,150token 数(工具定义)
~9.0 KB典型响应大小
对注意力有显著影响(占 128k 上下文窗口的 2.46%)

这是每次将服务器的工具加载到模型上下文窗口时所消耗的大致 token 数。数值越高,可用于其他任务的注意力就越少。

安装

一键安装

将以下内容添加到你的 `claude_desktop_config.json` 文件中:

{
  "mcpServers": {
    "dpolens": {
      "url": "https://mcp.dpolens.com/"
    }
  }
}

远程端点

https://mcp.dpolens.com/streamable-http

它能做什么

工具清单

工具(4)

🟢 只读🟡 写入🔴 删除⚪ 未知
🟢search_policies(query, limit, lang, as_of, include_explanatory, ...)

Search the privacy law this community version holds. Call this before writing or changing code that collects, stores, logs, shares or deletes personal data, and before answering a question about what the law requires. What comes back is the clause itself, word for word, with the key, document and version to cite it by. Questions asked here are kept 30 days, with nothing about who asked.

输入模式

{
  "type": "object",
  "properties": {
    "query": {
      "description": "The question, in words",
      "maxLength": 1000,
      "minLength": 1,
      "title": "Query",
      "type": "string"
    },
    "limit": {
      "default": 10,
      "description": "How many clauses to return",
      "maximum": 50,
      "minimum": 1,
      "title": "Limit",
      "type": "integer"
    },
    "lang": {
      "anyOf": [
        {
          "type": "string"
        },
        {
          "type": "null"
        }
      ],
      "default": null,
      "description": "The language of the question, en or ar. Leave it out to have it read from the letters the question is written in",
      "title": "Lang"
    },
    "as_of": {
      "anyOf": [
        {
          "format": "date",
          "type": "string"
        },
        {
          "type": "null"
        }
      ],
      "default": null,
      "description": "Read the documents as they stood on this date",
      "title": "As Of"
    },
    "include_explanatory": {
      "default": false,
      "description": "Include text that explains without obliging, such as a GDPR recital",
      "title": "Include Explanatory",
      "type": "boolean"
    },
    "laws": {
      "anyOf": [
        {
          "items": {
            "type": "string"
          },
          "maxItems": 20,
          "type": "array"
        },
        {
          "type": "null"
        }
      ],
      "default": null,
      "description": "Only these of the laws this organisation has selected, by slug, such as gdpr or uae-pdpl. Leave it out to search all of them",
      "title": "Laws"
    }
  },
  "required": [
    "query"
  ],
  "title": "search_policiesArguments"
}

输出模式

{
  "type": "object",
  "properties": {
    "searched": {
      "description": "What was searched, and as of when",
      "title": "Searched",
      "type": "string"
    },
    "results": {
      "items": {
        "$ref": "#/$defs/Match"
      },
      "title": "Results",
      "type": "array"
    }
  },
  "required": [
    "searched",
    "results"
  ],
  "$defs": {
    "Match": {
      "description": "A clause a search returned, with what else it points at.",
      "properties": {
        "key": {
          "description": "The canonical key a citation points at",
          "title": "Key",
          "type": "string"
        },
        "citation": {
          "description": "One line naming the clause, its version and its date",
          "title": "Citation",
          "type": "string"
        },
        "text": {
          "description": "The clause as it stands, word for word",
          "title": "Text",
          "type": "string"
        },
        "breadcrumb": {
          "description": "Where the clause sits, outermost first",
          "items": {
            "type": "string"
          },
          "title": "Breadcrumb",
          "type": "array"
        },
        "obliges": {
          "description": "False for text that explains without obliging, such as a recital",
          "title": "Obliges",
          "type": "boolean"
        },
        "document": {
          "title": "Document",
          "type": "string"
        },
        "version": {
          "anyOf": [
            {
              "type": "string"
            },
            {
              "type": "null"
            }
          ],
          "title": "Version"
        },
        "in_force_since": {
          "description": "The date this version took effect",
          "title": "In Force Since",
          "type": "string"
        },
        "lang": {
          "title": "Lang",
          "type": "string"
        },
        "authoritative": {
          "description": "Whether this language is the one that prevails in law",
          "title": "Authoritative",
          "type": "boolean"
        },
        "prevails": {
          "anyOf": [
            {
              "type": "string"
            },
            {
              "type": "null"
            }
          ],
          "default": null,
          "description": "For a clause shown in translation, the language whose text prevails",
          "title": "Prevails"
        },
        "prevailing_text": {
          "anyOf": [
            {
              "type": "string"
            },
            {
              "type": "null"
            }
          ],
          "default": null,
          "description": "For a clause shown in translation, the text that prevails, word for word",
          "title": "Prevailing Text"
        },
        "jurisdiction": {
          "anyOf": [
            {
              "type": "string"
            },
            {
              "type": "null"
            }
          ],
          "description": "Null for an organisation's own policy",
          "title": "Jurisdiction"
        },
        "trust_tier": {
          "anyOf": [
            {
              "type": "string"
            },
            {
              "type": "null"
            }
          ],
          "description": "verified when a named maintainer checked the pack against the official source, community when it passed validation only, null for an organisation's own policy",
          "title": "Trust Tier"
        },
        "source_url": {
          "anyOf": [
            {
              "type": "string"
            },
            {
              "type": "null"
            }
          ],
          "description": "Where the text was taken from, for a law",
          "title": "Source Url"
        },
        "archived": {
          "default": false,
          "description": "True for a clause of a policy the organisation has archived, which no longer applies. Say so when citing it",
          "title": "Archived",
          "type": "boolean"
        },
        "score": {
          "description": "Higher is a better match. Comparable within one search only",
          "title": "Score",
          "type": "number"
        },
        "cross_references": {
          "description": "Keys this clause's own words point at, to read with get_clause",
          "items": {
            "type": "string"
          },
          "title": "Cross References",
          "type": "array"
        }
      },
      "required": [
        "key",
        "citation",
        "text",
        "breadcrumb",
        "obliges",
        "document",
        "version",
        "in_force_since",
        "lang",
        "authoritative",
        "jurisdiction",
        "trust_tier",
        "source_url",
        "score",
        "cross_references"
      ],
      "title": "Match",
      "type": "object"
    }
  },
  "description": "What a search found, best match first.",
  "title": "Found"
}
🟢get_clause(key, lang, as_of, whole_subtree)

Read one clause by its key, with where it sits and what sits beneath it. Use it when a search result points at another clause, or when you need the whole of an article rather than the part that matched. The call is recorded, with the key that was read rather than a question.

输入模式

{
  "type": "object",
  "properties": {
    "key": {
      "description": "A canonical key, such as gdpr:art-17:para-1",
      "title": "Key",
      "type": "string"
    },
    "lang": {
      "default": "en",
      "description": "Which language to prefer, as a two letter code",
      "title": "Lang",
      "type": "string"
    },
    "as_of": {
      "anyOf": [
        {
          "format": "date",
          "type": "string"
        },
        {
          "type": "null"
        }
      ],
      "default": null,
      "description": "Read the clause as it stood on this date",
      "title": "As Of"
    },
    "whole_subtree": {
      "default": false,
      "description": "Also return this clause and everything beneath it in reading order, which is what you want for a whole article",
      "title": "Whole Subtree",
      "type": "boolean"
    }
  },
  "required": [
    "key"
  ],
  "title": "get_clauseArguments"
}

输出模式

{
  "type": "object",
  "properties": {
    "clause": {
      "$ref": "#/$defs/Clause"
    },
    "children": {
      "description": "The clauses directly beneath this one",
      "items": {
        "$ref": "#/$defs/Clause"
      },
      "title": "Children",
      "type": "array"
    },
    "cross_references": {
      "description": "Keys this clause's own words point at",
      "items": {
        "type": "string"
      },
      "title": "Cross References",
      "type": "array"
    },
    "subtree": {
      "description": "This clause and everything beneath it in reading order, when asked for",
      "items": {
        "$ref": "#/$defs/Clause"
      },
      "title": "Subtree",
      "type": "array"
    },
    "now": {
      "anyOf": [
        {
          "type": "string"
        },
        {
          "type": "null"
        }
      ],
      "default": null,
      "description": "For a policy's clause read in a version that is no longer in force, where the same rule is in the version in force. A policy's keys follow its printed numbers, so the rule may have another key now",
      "title": "Now"
    },
    "formerly": {
      "anyOf": [
        {
          "type": "string"
        },
        {
          "type": "null"
        }
      ],
      "default": null,
      "description": "Set when this key named a different rule in the policy's version before",
      "title": "Formerly"
    }
  },
  "required": [
    "clause",
    "children",
    "cross_references"
  ],
  "$defs": {
    "Clause": {
      "description": "One clause, and what it takes to check it.",
      "properties": {
        "key": {
          "description": "The canonical key a citation points at",
          "title": "Key",
          "type": "string"
        },
        "citation": {
          "description": "One line naming the clause, its version and its date",
          "title": "Citation",
          "type": "string"
        },
        "text": {
          "description": "The clause as it stands, word for word",
          "title": "Text",
          "type": "string"
        },
        "breadcrumb": {
          "description": "Where the clause sits, outermost first",
          "items": {
            "type": "string"
          },
          "title": "Breadcrumb",
          "type": "array"
        },
        "obliges": {
          "description": "False for text that explains without obliging, such as a recital",
          "title": "Obliges",
          "type": "boolean"
        },
        "document": {
          "title": "Document",
          "type": "string"
        },
        "version": {
          "anyOf": [
            {
              "type": "string"
            },
            {
              "type": "null"
            }
          ],
          "title": "Version"
        },
        "in_force_since": {
          "description": "The date this version took effect",
          "title": "In Force Since",
          "type": "string"
        },
        "lang": {
          "title": "Lang",
          "type": "string"
        },
        "authoritative": {
          "description": "Whether this language is the one that prevails in law",
          "title": "Authoritative",
          "type": "boolean"
        },
        "prevails": {
          "anyOf": [
            {
              "type": "string"
            },
            {
              "type": "null"
            }
          ],
          "default": null,
          "description": "For a clause shown in translation, the language whose text prevails",
          "title": "Prevails"
        },
        "prevailing_text": {
          "anyOf": [
            {
              "type": "string"
            },
            {
              "type": "null"
            }
          ],
          "default": null,
          "description": "For a clause shown in translation, the text that prevails, word for word",
          "title": "Prevailing Text"
        },
        "jurisdiction": {
          "anyOf": [
            {
              "type": "string"
            },
            {
              "type": "null"
            }
          ],
          "description": "Null for an organisation's own policy",
          "title": "Jurisdiction"
        },
        "trust_tier": {
          "anyOf": [
            {
              "type": "string"
            },
            {
              "type": "null"
            }
          ],
          "description": "verified when a named maintainer checked the pack against the official source, community when it passed validation only, null for an organisation's own policy",
          "title": "Trust Tier"
        },
        "source_url": {
          "anyOf": [
            {
              "type": "string"
            },
            {
              "type": "null"
            }
          ],
          "description": "Where the text was taken from, for a law",
          "title": "Source Url"
        },
        "archived": {
          "default": false,
          "description": "True for a clause of a policy the organisation has archived, which no longer applies. Say so when citing it",
          "title": "Archived",
          "type": "boolean"
        }
      },
      "required": [
        "key",
        "citation",
        "text",
        "breadcrumb",
        "obliges",
        "document",
        "version",
        "in_force_since",
        "lang",
        "authoritative",
        "jurisdiction",
        "trust_tier",
        "source_url"
      ],
      "title": "Clause",
      "type": "object"
    }
  },
  "description": "One clause, where it sits, and what sits beneath it.",
  "title": "ClauseInContext"
}
🟢list_documents(limit, offset, as_of)

List the laws this community version can cite, and which version of each is in force.

输入模式

{
  "type": "object",
  "properties": {
    "limit": {
      "default": 50,
      "description": "How many to return",
      "maximum": 100,
      "minimum": 1,
      "title": "Limit",
      "type": "integer"
    },
    "offset": {
      "default": 0,
      "description": "Skip this many first",
      "minimum": 0,
      "title": "Offset",
      "type": "integer"
    },
    "as_of": {
      "anyOf": [
        {
          "format": "date",
          "type": "string"
        },
        {
          "type": "null"
        }
      ],
      "default": null,
      "description": "List the documents in force on this date",
      "title": "As Of"
    }
  },
  "title": "list_documentsArguments"
}

输出模式

{
  "type": "object",
  "properties": {
    "documents": {
      "items": {
        "$ref": "#/$defs/Document"
      },
      "title": "Documents",
      "type": "array"
    },
    "total": {
      "description": "How many documents are in force, ignoring limit and offset",
      "title": "Total",
      "type": "integer"
    }
  },
  "required": [
    "documents",
    "total"
  ],
  "$defs": {
    "Document": {
      "description": "One document this instance can cite.",
      "properties": {
        "slug": {
          "description": "The name to pass to get_document",
          "title": "Slug",
          "type": "string"
        },
        "title": {
          "title": "Title",
          "type": "string"
        },
        "kind": {
          "description": "law, or org_policy for the organisation's own",
          "title": "Kind",
          "type": "string"
        },
        "version": {
          "anyOf": [
            {
              "type": "string"
            },
            {
              "type": "null"
            }
          ],
          "title": "Version"
        },
        "in_force_since": {
          "title": "In Force Since",
          "type": "string"
        },
        "clauses": {
          "title": "Clauses",
          "type": "integer"
        },
        "languages": {
          "items": {
            "type": "string"
          },
          "title": "Languages",
          "type": "array"
        },
        "jurisdiction": {
          "anyOf": [
            {
              "type": "string"
            },
            {
              "type": "null"
            }
          ],
          "title": "Jurisdiction"
        },
        "trust_tier": {
          "anyOf": [
            {
              "type": "string"
            },
            {
              "type": "null"
            }
          ],
          "title": "Trust Tier"
        },
        "source_url": {
          "anyOf": [
            {
              "type": "string"
            },
            {
              "type": "null"
            }
          ],
          "title": "Source Url"
        }
      },
      "required": [
        "slug",
        "title",
        "kind",
        "version",
        "in_force_since",
        "clauses",
        "languages",
        "jurisdiction",
        "trust_tier",
        "source_url"
      ],
      "title": "Document",
      "type": "object"
    }
  },
  "description": "What this instance can cite today.",
  "title": "Documents"
}
🟢get_document(slug, as_of)

Read one document and its top level structure, without the text. The outline is where to find a clause key when you know roughly where to look. Read the words with get_clause. The call is recorded.

输入模式

{
  "type": "object",
  "properties": {
    "slug": {
      "description": "The document's slug, such as gdpr",
      "title": "Slug",
      "type": "string"
    },
    "as_of": {
      "anyOf": [
        {
          "format": "date",
          "type": "string"
        },
        {
          "type": "null"
        }
      ],
      "default": null,
      "description": "Read the document as it stood on this date",
      "title": "As Of"
    }
  },
  "required": [
    "slug"
  ],
  "title": "get_documentArguments"
}

输出模式

{
  "type": "object",
  "properties": {
    "document": {
      "$ref": "#/$defs/Document"
    },
    "outline": {
      "items": {
        "$ref": "#/$defs/OutlineEntry"
      },
      "title": "Outline",
      "type": "array"
    }
  },
  "required": [
    "document",
    "outline"
  ],
  "$defs": {
    "Document": {
      "description": "One document this instance can cite.",
      "properties": {
        "slug": {
          "description": "The name to pass to get_document",
          "title": "Slug",
          "type": "string"
        },
        "title": {
          "title": "Title",
          "type": "string"
        },
        "kind": {
          "description": "law, or org_policy for the organisation's own",
          "title": "Kind",
          "type": "string"
        },
        "version": {
          "anyOf": [
            {
              "type": "string"
            },
            {
              "type": "null"
            }
          ],
          "title": "Version"
        },
        "in_force_since": {
          "title": "In Force Since",
          "type": "string"
        },
        "clauses": {
          "title": "Clauses",
          "type": "integer"
        },
        "languages": {
          "items": {
            "type": "string"
          },
          "title": "Languages",
          "type": "array"
        },
        "jurisdiction": {
          "anyOf": [
            {
              "type": "string"
            },
            {
              "type": "null"
            }
          ],
          "title": "Jurisdiction"
        },
        "trust_tier": {
          "anyOf": [
            {
              "type": "string"
            },
            {
              "type": "null"
            }
          ],
          "title": "Trust Tier"
        },
        "source_url": {
          "anyOf": [
            {
              "type": "string"
            },
            {
              "type": "null"
            }
          ],
          "title": "Source Url"
        }
      },
      "required": [
        "slug",
        "title",
        "kind",
        "version",
        "in_force_since",
        "clauses",
        "languages",
        "jurisdiction",
        "trust_tier",
        "source_url"
      ],
      "title": "Document",
      "type": "object"
    },
    "OutlineEntry": {
      "description": "What a top-level clause is, without what it says.",
      "properties": {
        "key": {
          "title": "Key",
          "type": "string"
        },
        "label": {
          "anyOf": [
            {
              "type": "string"
            },
            {
              "type": "null"
            }
          ],
          "description": "The numbering the document itself uses",
          "title": "Label"
        },
        "heading": {
          "anyOf": [
            {
              "type": "string"
            },
            {
              "type": "null"
            }
          ],
          "title": "Heading"
        },
        "obliges": {
          "title": "Obliges",
          "type": "boolean"
        },
        "children": {
          "description": "How many clauses sit directly beneath this one",
          "title": "Children",
          "type": "integer"
        }
      },
      "required": [
        "key",
        "label",
        "heading",
        "obliges",
        "children"
      ],
      "title": "OutlineEntry",
      "type": "object"
    }
  },
  "description": "One document and its top level.\n\nThe text is left out on purpose: a document of a thousand clauses does not\nbelong in one answer. Read the words with get_clause.",
  "title": "DocumentInDetail"
}

社区

评价此服务器

证据

最近观测

已验证未记录版本4 个工具