Privacy law your AI assistant can cite: the exact clause and its version. GDPR and UAE PDPL today.
Maintain this server? Claim it
Call this server's tools from your browser. Nothing to install.
Requests go through mcptry because browsers can't call most MCP servers directly. Header values are sent to the server for that request only and are never stored or logged.
Tool list from our last check. Connect live to refresh it.
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.
A canonical key, such as gdpr:art-17:para-1
Which language to prefer, as a two letter code
Read the clause as it stood on this date
Also return this clause and everything beneath it in reading order, which is what you want for a whole article
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.
| Argument | Type | Description |
|---|---|---|
| key* | string | A canonical key, such as gdpr:art-17:para-1 |
| lang | string | Which language to prefer, as a two letter code |
| as_of | any | Read the clause as it stood on this date |
| whole_subtree | boolean | Also return this clause and everything beneath it in reading order, which is what you want for a whole article |
{
"type": "object",
"title": "get_clauseArguments",
"required": [
"key"
],
"properties": {
"key": {
"type": "string",
"title": "Key",
"description": "A canonical key, such as gdpr:art-17:para-1"
},
"lang": {
"type": "string",
"title": "Lang",
"default": "en",
"description": "Which language to prefer, as a two letter code"
},
"as_of": {
"anyOf": [
{
"type": "string",
"format": "date"
},
{
"type": "null"
}
],
"title": "As Of",
"default": null,
"description": "Read the clause as it stood on this date"
},
"whole_subtree": {
"type": "boolean",
"title": "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"
}
}
}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.
| Argument | Type | Description |
|---|---|---|
| slug* | string | The document's slug, such as gdpr |
| as_of | any | Read the document as it stood on this date |
{
"type": "object",
"title": "get_documentArguments",
"required": [
"slug"
],
"properties": {
"slug": {
"type": "string",
"title": "Slug",
"description": "The document's slug, such as gdpr"
},
"as_of": {
"anyOf": [
{
"type": "string",
"format": "date"
},
{
"type": "null"
}
],
"title": "As Of",
"default": null,
"description": "Read the document as it stood on this date"
}
}
}List the laws this community version can cite, and which version of each is in force.
| Argument | Type | Description |
|---|---|---|
| as_of | any | List the documents in force on this date |
| limit | integer | How many to return |
| offset | integer | Skip this many first |
{
"type": "object",
"title": "list_documentsArguments",
"properties": {
"as_of": {
"anyOf": [
{
"type": "string",
"format": "date"
},
{
"type": "null"
}
],
"title": "As Of",
"default": null,
"description": "List the documents in force on this date"
},
"limit": {
"type": "integer",
"title": "Limit",
"default": 50,
"maximum": 100,
"minimum": 1,
"description": "How many to return"
},
"offset": {
"type": "integer",
"title": "Offset",
"default": 0,
"minimum": 0,
"description": "Skip this many first"
}
}
}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.
| Argument | Type | Description |
|---|---|---|
| lang | any | The language of the question, en or ar. Leave it out to have it read from the letters the question is written in |
| laws | any | 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 |
| as_of | any | Read the documents as they stood on this date |
| limit | integer | How many clauses to return |
| query* | string | The question, in words |
| include_explanatory | boolean | Include text that explains without obliging, such as a GDPR recital |
{
"type": "object",
"title": "search_policiesArguments",
"required": [
"query"
],
"properties": {
"lang": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"title": "Lang",
"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"
},
"laws": {
"anyOf": [
{
"type": "array",
"items": {
"type": "string"
},
"maxItems": 20
},
{
"type": "null"
}
],
"title": "Laws",
"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"
},
"as_of": {
"anyOf": [
{
"type": "string",
"format": "date"
},
{
"type": "null"
}
],
"title": "As Of",
"default": null,
"description": "Read the documents as they stood on this date"
},
"limit": {
"type": "integer",
"title": "Limit",
"default": 10,
"maximum": 50,
"minimum": 1,
"description": "How many clauses to return"
},
"query": {
"type": "string",
"title": "Query",
"maxLength": 1000,
"minLength": 1,
"description": "The question, in words"
},
"include_explanatory": {
"type": "boolean",
"title": "Include Explanatory",
"default": false,
"description": "Include text that explains without obliging, such as a GDPR recital"
}
}
}