mydata-mcp
Click on "Install Server".
Wait a few minutes for the server to deploy. Once ready, it will show a "Started" state.
In the chat, type
@followed by the MCP server name and your instructions, e.g., "@mydata-mcpWho are my top 5 suppliers by spend this quarter?"
That's it! The server will respond to your query, and you can continue using it as needed.
Here is a step-by-step guide with screenshots.
mydata-mcp
Read-only MCP server for the Greek AADE myDATA e-books API.
Ask Claude (or any MCP client) questions about your business's invoices, income, and expenses — in plain language. All myDATA codes (document types, VAT categories, E3 classifications) are decoded into human-readable bilingual labels before they ever reach the model.
⚠️ Unofficial project — not affiliated with AADE. Strictly read-only: no write endpoint of the myDATA API is ever called.
What can you ask?
"Ποια τιμολόγια έλαβα από προμηθευτές τον Ιούλιο;"
"What was my gross margin in July 2026?"
"Who are my top 5 suppliers by spend this quarter?"
"Show me all credit notes I issued last month."
Related MCP server: docnova-mcp
Features
4 tools — received documents, transmitted documents, income summary, expense summary, with date/VAT/type filters and transparent pagination.
3 resources — full myDATA code tables (invoice types, VAT categories, classifications) the model can consult on demand.
1 prompt —
monthly_reviewgenerates a complete monthly business review.Battle-tested XML handling — survives myDATA's escaped/nested and occasionally malformed XML responses via lxml recovery mode.
Compact output — clean, typed JSON instead of raw XML dumps; details are opt-in per call, so token usage stays low.
Architecture
flowchart LR
LLM["MCP client<br/>(Claude Desktop / Claude Code)"] <-->|stdio| S[server.py]
S --> C["client.py<br/>httpx · auth · pagination"]
C <-->|HTTPS/XML| A[("AADE myDATA API")]
C --> P["parser.py<br/>xmltodict + lxml recovery"]
P --> N["normalizer.py<br/>pydantic + code decoding"]
N -->|compact JSON| SQuickstart
1. Get myDATA credentials
Register at mydata.aade.gr to obtain your
user_id and subscription_key.
2. Configure your MCP client
Claude Desktop (claude_desktop_config.json) or Claude Code
(claude mcp add):
{
"mcpServers": {
"mydata": {
"command": "uvx",
"args": ["--from", "git+https://github.com/nikagabriel741agent/myData-MCP-Server", "mydata-mcp"],
"env": {
"MYDATA_USER_ID": "your-user-id",
"MYDATA_SUBSCRIPTION_KEY": "your-subscription-key"
}
}
}
}For a local checkout, use "args": ["--from", "/path/to/mydata-mcp", "mydata-mcp"].
3. Ask away
Try the built-in prompt: monthly_review(month=7, year=2026).
Tools
Tool | myDATA endpoint | Description |
|
| Documents received from suppliers |
|
| Documents you issued |
|
| Income bookings per E3 classification |
|
| Expense bookings per E3 classification |
Common parameters: date_from / date_to (ISO or dd/MM/yyyy),
counterpart_vat, invoice_type, include_details, max_results.
Every response carries page_info: {has_more, next_mark}.
Resources
URI | Contents |
| Document types 1.1–17.6 (EN + EL) |
| VAT categories with rates |
| E3/VAT classification categories & types |
Configuration
Variable | Required | Description |
| ✅ | AADE user id |
| ✅ | AADE subscription key |
| — |
|
Development
uv sync # install
uv run pytest # test (all HTTP mocked — no credentials needed)
uv run ruff check .License
MIT
Available Tools
4 toolsget_expense_summaryA
Fetch EXPENSE bookings per classification from myDATA e-books (RequestMyExpenses).
Each record aggregates documents per counterparty/type/classification with net, VAT, and gross totals. Classification codes are decoded to labels.
| Name | Required | Description | Default |
|---|---|---|---|
| date_to | Yes | End date, YYYY-MM-DD or dd/MM/yyyy. | |
| date_from | Yes | Start date, YYYY-MM-DD or dd/MM/yyyy. | |
| max_results | No | Stop after this many records; page_info.has_more signals truncation. | |
| counterpart_vat | No | Filter by the counterparty's VAT number (ΑΦΜ). |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Since no annotations are provided, the description carries the full burden. It discloses the aggregation behavior ('aggregates documents per counterparty/type/classification') and the decoding of classification codes, and implies a read-only operation via 'Fetch'. However, it does not mention pagination, error handling, or other operational behaviors, leaving some gaps.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is exactly two sentences, front-loaded with the action and resource. It is free of filler, and every phrase adds value—including the source, aggregation details, and the decoding behavior.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With a comprehensive schema (100% parameter coverage) and an output schema present, the description is sufficient for understanding the tool's behavior. It covers the source, aggregation, and classification decoding. It does not explain pagination explicitly, but the max_results parameter description covers that, making the overall context complete.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The input schema provides 100% coverage for all four parameters, so the description is not required to explain them. The description adds minor context about how results are grouped, but does not add syntax or format details beyond the schema, which the schema already handles well.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description uses the specific verb 'Fetch' and the resource 'EXPENSE bookings per classification from myDATA e-books (RequestMyExpenses)', which clearly distinguishes it from sibling tools like get_income_summary and get_received_documents. The additional detail about aggregation per counterparty/type/classification further clarifies its exact function.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description does not explicitly mention alternatives or when-not-to-use scenarios, but the clear focus on EXPENSE bookings and the sibling tool names imply its usage context. It provides clear context that this is for expense summaries, without explicit exclusions.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_income_summaryA
Fetch INCOME bookings per classification from myDATA e-books (RequestMyIncome).
Each record aggregates documents per counterparty/type/classification with net, VAT, and gross totals. Classification codes are decoded to labels.
| Name | Required | Description | Default |
|---|---|---|---|
| date_to | Yes | End date, YYYY-MM-DD or dd/MM/yyyy. | |
| date_from | Yes | Start date, YYYY-MM-DD or dd/MM/yyyy. | |
| max_results | No | Stop after this many records; page_info.has_more signals truncation. | |
| counterpart_vat | No | Filter by the counterparty's VAT number (ΑΦΜ). |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries full burden. It discloses aggregation behavior and label decoding, but does not mention pagination/truncation (max_results) or any limitations/caveats. It's adequate but lacks depth.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two sentences, front-loaded with the primary action, and every word serves a purpose. No filler or repetition.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the presence of complete schema descriptions and an output schema, the description covers the core functionality sufficiently. However, it could add a note about pagination and explicit usage context to be fully complete.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so the parameter semantics are already fully documented. The description adds no extra insight into parameters, but the baseline of 3 is appropriate because the schema does the heavy lifting.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool fetches INCOME bookings per classification from myDATA e-books, using the specific verb 'Fetch' and distinguishes it from siblings that handle different document types (received, transmitted, expense). The mention of aggregation and decoded labels adds precision.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description implies this tool is for income summaries, and the sibling names indicate alternatives, but there is no explicit 'use this when' or 'instead of' guidance. The context is clear enough for an agent to choose it for income summary tasks.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_received_documentsA
Fetch documents RECEIVED by your business (e.g. supplier invoices) from myDATA.
| Name | Required | Description | Default |
|---|---|---|---|
| date_to | Yes | End date, YYYY-MM-DD or dd/MM/yyyy. | |
| date_from | Yes | Start date, YYYY-MM-DD or dd/MM/yyyy. | |
| max_results | No | Stop after this many documents; page_info.has_more signals truncation. | |
| invoice_type | No | Filter by myDATA document type code (e.g. "1.1"); see resource mydata://codes/invoice-types. | |
| counterpart_vat | No | Filter by the counterparty's VAT number (ΑΦΜ). | |
| include_details | No | Include per-line details (VAT categories, classifications). |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description must carry the transparency burden. 'Fetch' clearly implies a read-only, non-destructive operation, which is the key behavioral trait. However, it does not disclose additional behaviors such as pagination, date-range constraints, or potential API quirks.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single, efficient sentence that front-loads the main action and resource. Every word contributes meaning, and there is no redundancy or filler.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Despite being concise, the description combined with the fully documented schema and output schema provides sufficient context for correct invocation and interpretation. The main gap is the lack of explicit usage differentiation, which is addressed in the usage_guidelines dimension.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The schema has 100% coverage for all 6 parameters, so the description does not need to add parameter details. The description adds no extra semantics beyond the schema, but this is acceptable given the baseline for high schema coverage.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the action ('Fetch') and the resource ('documents RECEIVED by your business'), with a concrete example (supplier invoices) and source system (myDATA). The emphasis on 'RECEIVED' distinguishes it from sibling tools like get_transmitted_documents.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The word 'RECEIVED' implicitly contrasts with transmitted documents, suggesting when to use this tool. However, there is no explicit when-to-use vs. alternatives, no exclusions, and no mention of the sibling tools or situations where this tool is inappropriate.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_transmitted_documentsA
Fetch documents ISSUED by your business (sales invoices, receipts) from myDATA.
| Name | Required | Description | Default |
|---|---|---|---|
| date_to | Yes | End date, YYYY-MM-DD or dd/MM/yyyy. | |
| date_from | Yes | Start date, YYYY-MM-DD or dd/MM/yyyy. | |
| max_results | No | Stop after this many documents; page_info.has_more signals truncation. | |
| invoice_type | No | Filter by myDATA document type code (e.g. "11.1"); see resource mydata://codes/invoice-types. | |
| counterpart_vat | No | Filter by the customer's VAT number (ΑΦΜ). | |
| include_details | No | Include per-line details (VAT categories, classifications). |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, placing the full burden on the description. It only says 'Fetch documents...' without disclosing potential side effects, permissions, pagination behavior, or rate limits. While 'fetch' implies a read-only operation, the description lacks needed behavioral context for a tool with no annotations.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single, front-loaded sentence that clearly and efficiently conveys the core purpose. There is no wasted text or redundancy.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the output schema exists and the input schema is fully described, the description adequately covers the tool's purpose and scope. It lacks some usage guidance and behavioral details, but the structured data compensates for potential return-value explanations. It is reasonably complete for a moderately complex tool.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The input schema has 100% description coverage for all parameters, so the baseline is 3. The tool description adds no additional meaning beyond what the schema already provides, such as clarifying date formats or the role of 'max_results' and 'include_details.' It simply restates the general purpose.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description uses a specific verb 'Fetch' and clearly identifies the resource as 'documents ISSUED by your business (sales invoices, receipts) from myDATA.' This directly distinguishes it from sibling tools like get_received_documents by emphasizing 'ISSUED' as opposed to received.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides clear context by stating the tool retrieves issued documents, which implies when to use it. However, it does not explicitly mention alternatives or exclusions, such as 'use get_received_documents for incoming documents,' so it stops short of a 5.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
Tool Schema Changelog
Recent tool additions, removals, and schema changes observed during successful MCP inspections. Dates show when Glama detected each change.
4 tool updates
v0.1.0- First observed
get_expense_summary - First observed
get_income_summary - First observed
get_received_documents - First observed
get_transmitted_documents
TDQS
Each tool targets a clearly distinct resource: received vs transmitted documents, and income vs expense summaries. No overlap in purpose or data returned.
All tool names follow the same get_[adjective]_[noun] pattern, with consistent snake_case and clear modifiers. The naming style is uniform and predictable.
Four tools is well within the ideal 3-15 range, and each covers a distinct core query type for the myDATA domain. No redundant tools are present.
The read-only surface logically covers documents and summaries for both income and expenses. Major gaps are unlikely, though individual document retrieval or mutation tools are absent, which may not be required for this reporting-oriented server.
Maintenance
Resources
Unclaimed servers have limited discoverability.
Looking for Admin?
If you are the server author, to access and configure the admin panel.
Related MCP Connectors
Hosted MCP server for Mini Accountant: invoices, expenses, customers, analytics, tax estimates.
MCP server for Quaderno — tax-rate calculation, invoices, contacts, products, receipts & expenses.
MCP server for Codat — companies, connections, invoices, bills and financial statements.
Read-only MCP server for ClassQuill, a tutoring-business-management platform.
Related MCP Servers
- FlicenseNot gradedqualityDmaintenanceRead-only MCP server for TourScale ERPNext, enabling agents to query franchisees, agreements, invoices, and GL entries via natural language.-

docnova-mcpofficial
AlicenseAqualityDmaintenanceMCP server for e-invoice platforms. Enables natural language querying of invoices, partners, company data, and financial reports.18176MIT- AlicenseAqualityDmaintenanceRead-only MCP server for accessing Wallet by BudgetBakers financial data, allowing users to query accounts, transactions, categories, budgets, and more via natural language.10MIT
- AlicenseBqualityAmaintenanceRead-only MCP server for self-hosted Manager.io bookkeeping, providing curated GET tools to access accounting data like invoices, balances, and reports.101MIT
Latest Blog Posts
- Who's Calling? MCP Hosts Are an Identity Blind Spot (And the Spec Knows It)By Om-Shree-0709 on .mcpAgent IdentityOAuth 2.1
- Your AI Chatbot Just Exposed Your CEO's Salary to an InternBy Om-Shree-0709 on .Agent IdentityMCP SecurityOAuth Delegation
- Why MCP Servers Need Execution Sandboxing (And Why Your Current Stack Isn't Enough)By Om-Shree-0709 on .Agentic AiPrompt InjectionWebAssembly
MCP directory API
We provide all the information about MCP servers via our MCP API.
curl -X GET 'https://glama.ai/api/mcp/v1/servers/gabrielnika/myData-MCP-Server'
If you have feedback or need assistance with the MCP directory API, please join our Discord server