Skip to main content
Glama

List tax deadlines

well_list_tax_deadlines
Read-only

List a French company's or micro-entrepreneur's upcoming tax deadlines, computed from its tax profile: the VAT returns (CA3 monthly or quarterly, or the annual CA12 with its July and December instalments), the corporate income tax instalments, balance and return, the CFE, the filing of the annual accounts, the employer's monthly payroll return (DSN), which also carries the payment of the URSSAF contributions every month, or after each quarter for an employer under 11 employees who chose to pay quarterly, and a micro-entrepreneur's URSSAF turnover declaration. A tax deadline question ("what are my next tax deadlines", "quelles sont mes prochaines échéances fiscales", "quand déclarer mon chiffre d'affaires à l'URSSAF") does not start here: load the vat-radar skill first (with well_get_skill, or with the host's own skill tool when the Well skills are installed in it) and follow it; the skill calls this tool. It reads the profile Well holds and computes the dates; it reads no tax site and stores nothing. For the VAT amount of a period, call well_get_vat_summary as well.

deadlines lists the deadlines due from today for months months (default 3, at most 12), soonest first. Each has due.from and due.to (one day when equal; the CA3 window from the 15th to the 24th otherwise), the period it covers when it covers one, a condition when the profile cannot settle the date or whether it applies, and its source. The conditions: prior_year_tax_above_3000_eur (no instalment when last year's corporate tax was under 3,000 EUR); not_the_creation_year (no CFE in the year of creation); approval_on_last_allowed_day (the latest filing day when the accounts are approved on the last day the law allows); day_set_per_company (the administration sets the CA3 day per company inside the window and Well does not know it: the assumed date is due.from, the 15th, and the answer says it is assumed); day_from_prior_return (the CA3 day is the one on the latest VAT return the person gave Well: say where the day comes from); first_declaration_date_assumed (the first URSSAF declaration covers every month since the start of activity, and its date is assumed because the official texts disagree: say so); fewer_than_50_employees (the monthly payroll day is the 15th for an employer under 50 employees; one of 50 or more that pays the wages in the month files and pays by the 5th: say the day depends on the headcount). A micro-entrepreneur declares every URSSAF period, also one with no turnover (« néant »). The VAT returns of a micro-entrepreneur show only when its VAT regime is not the franchise. State every date with its source and its condition. Never state a date that is not in deadlines.

undated lists the deadlines Well cannot date, each with a reason. missing_profile_key: the missing profile keys (legal_form, vat_regime, vat_filing_frequency, corporate_tax_regime, fiscal_year_end, urssaf_filing_frequency, payroll_contribution_payment_frequency) are not set; ask for one missing value at a time (for payroll_contribution_payment_frequency, ask whether the company has employees and how often it pays the contributions; a company with no employee saves none), save legal_form with well_update_company and the accounting settings with well_upsert_accounting_settings, then re-read the calendar. Never guess a missing key. unsupported_legal_form: the legal form is set, but Well's table holds no rule for it, and missing is empty; say Well does not date the deadlines of that legal form, and ask nothing. not_owed lists the deadlines the profile says the company does not owe, such as the CA3 under the VAT franchise, the URSSAF declaration of a company, or the corporate tax and annual accounts of a micro-entrepreneur, or the CFE of a company the profile marks exempt (cfe_liable false), or the payroll deadlines of a company with no employee (payroll_contribution_payment_frequency none).

status: "unsupported_jurisdiction" means the workspace's accounting country is not France: Well holds no calendar for it. status: "failed" means the read failed: the calendar is unknown, never empty.

When the token authorizes one workspace, call this directly — no workspace call is needed first. When it authorizes several, this read will not guess which one you mean: pass workspace_id on the call.

Input Schema

NameRequiredDescriptionDefault
monthsNoHow many months ahead to list, 3 by default.
workspace_idNoTarget workspace. Omit when the token authorizes one workspace. Required when it authorizes several: this read reports one workspace's own figures and will not choose which.
conversation_idNoThe conversation id returned by the previous Well result, in its meta under well/conversation_id, in its structuredContent, or in its JSON text block. Pass it back on every call in the same conversation, including a call a card makes, so the chosen workspace and the earlier answers still apply. It decides the conversation on its own: nothing the host states about the session replaces it. Omit it only on the first call of a conversation.
workspace_scopeNoRestrict this call to the family: the token's primary workspace plus the company workspaces under it that you are a member of. Unrelated authorized workspaces drop out of the read; row reads merge across the family, while a per-workspace figure still reports exactly one workspace.

Output Schema

NameRequiredDescriptionDefault
errorNo
todayNo
statusYes
profileNo
successYes
undatedNo
not_owedNo
deadlinesNo
country_codeNo
conversation_idNoThe conversation this result belongs to. Pass it back as the conversation_id argument on every later Well call in the same conversation.
newly_connectedNoTools that connected to this workspace since the last result and that no session was told about yet, oldest first. Present only when at least one tool is new. The connected-line rule says when to tell an entry; when it does, one line per entry, in the person's language: "<name> is connected.". Never fold several entries into one sentence. Each entry comes back once, on one result only: never repeat its line later.
resolved_workspaceNoThe workspace that answered, when the caller named none and the token authorizes several.
conversation_id_noteNoPresent only when the server opened a fresh lane, stating that no choice recorded earlier was read.
conversation_id_sourceNoWhere the conversation id came from: the host's own request meta, the caller's argument, or a fresh lane the server opened.

Schema Changelog

Changes observed during successful MCP inspections.

  1. Changed8 schema fields changed
    • changedOutput schema / properties / deadlines / items / properties / condition / anyOf
      Previous value: -[
      -  {
      -    "enum": [
      -      "prior_year_tax_above_3000_eur",
      -      "not_the_creation_year",
      -      "approval_on_last_allowed_day",
      -      "day_set_per_company",
      -      "day_from_prior_return",
      -      "first_declaration_date_assumed"
      -    ],
      -    "type": "string"
      -  },
      -  {
      -    "type": "null"
      -  }
      -]New value: +[
      +  {
      +    "enum": [
      +      "prior_year_tax_above_3000_eur",
      +      "not_the_creation_year",
      +      "approval_on_last_allowed_day",
      +      "day_set_per_company",
      +      "day_from_prior_return",
      +      "first_declaration_date_assumed",
      +      "fewer_than_50_employees"
      +    ],
      +    "type": "string"
      +  },
      +  {
      +    "type": "null"
      +  }
      +]
    • changedOutput schema / properties / deadlines / items / properties / id / enum
      Previous value: -[
      -  "fr-vat-ca3",
      -  "fr-vat-ca12",
      -  "fr-vat-ca12-instalment",
      -  "fr-corporate-tax-instalment",
      -  "fr-corporate-tax-balance",
      -  "fr-corporate-tax-return",
      -  "fr-cfe",
      -  "fr-annual-accounts",
      -  "fr-micro-turnover"
      -]New value: +[
      +  "fr-vat-ca3",
      +  "fr-vat-ca12",
      +  "fr-vat-ca12-instalment",
      +  "fr-corporate-tax-instalment",
      +  "fr-corporate-tax-balance",
      +  "fr-corporate-tax-return",
      +  "fr-cfe",
      +  "fr-annual-accounts",
      +  "fr-micro-turnover",
      +  "fr-payroll-dsn",
      +  "fr-payroll-dsn-contributions"
      +]
    • changedOutput schema / properties / not_owed / items / enum
      Previous value: -[
      -  "fr-vat-ca3",
      -  "fr-vat-ca12",
      -  "fr-vat-ca12-instalment",
      -  "fr-corporate-tax-instalment",
      -  "fr-corporate-tax-balance",
      -  "fr-corporate-tax-return",
      -  "fr-cfe",
      -  "fr-annual-accounts",
      -  "fr-micro-turnover"
      -]New value: +[
      +  "fr-vat-ca3",
      +  "fr-vat-ca12",
      +  "fr-vat-ca12-instalment",
      +  "fr-corporate-tax-instalment",
      +  "fr-corporate-tax-balance",
      +  "fr-corporate-tax-return",
      +  "fr-cfe",
      +  "fr-annual-accounts",
      +  "fr-micro-turnover",
      +  "fr-payroll-dsn",
      +  "fr-payroll-dsn-contributions"
      +]
    • addedOutput schema / properties / profile / properties / cfe_liable
      Added value: +{
      +  "description": "False means the company is exempt from the CFE; null means not known.",
      +  "type": [
      +    "boolean",
      +    "null"
      +  ]
      +}
    • addedOutput schema / properties / profile / properties / payroll_contribution_payment_frequency
      Added value: +{
      +  "anyOf": [
      +    {
      +      "enum": [
      +        "monthly",
      +        "quarterly",
      +        "none"
      +      ],
      +      "type": "string"
      +    },
      +    {
      +      "type": "null"
      +    }
      +  ],
      +  "description": "How often the company pays the URSSAF contributions; none means no employee; null means not known."
      +}
    • changedOutput schema / properties / profile / required
      Previous value: -[
      -  "legal_form",
      -  "vat_regime",
      -  "vat_filing_frequency",
      -  "corporate_tax_regime",
      -  "fiscal_year_start_month",
      -  "urssaf_filing_frequency",
      -  "micro_activity_regime",
      -  "flat_income_tax_option",
      -  "micro_acre",
      -  "micro_acre_start_date",
      -  "micro_acre_end_date"
      -]New value: +[
      +  "legal_form",
      +  "vat_regime",
      +  "vat_filing_frequency",
      +  "corporate_tax_regime",
      +  "fiscal_year_start_month",
      +  "urssaf_filing_frequency",
      +  "micro_activity_regime",
      +  "flat_income_tax_option",
      +  "micro_acre",
      +  "micro_acre_start_date",
      +  "micro_acre_end_date",
      +  "payroll_contribution_payment_frequency",
      +  "cfe_liable"
      +]
    • changedOutput schema / properties / undated / items / properties / id / enum
      Previous value: -[
      -  "fr-vat-ca3",
      -  "fr-vat-ca12",
      -  "fr-vat-ca12-instalment",
      -  "fr-corporate-tax-instalment",
      -  "fr-corporate-tax-balance",
      -  "fr-corporate-tax-return",
      -  "fr-cfe",
      -  "fr-annual-accounts",
      -  "fr-micro-turnover"
      -]New value: +[
      +  "fr-vat-ca3",
      +  "fr-vat-ca12",
      +  "fr-vat-ca12-instalment",
      +  "fr-corporate-tax-instalment",
      +  "fr-corporate-tax-balance",
      +  "fr-corporate-tax-return",
      +  "fr-cfe",
      +  "fr-annual-accounts",
      +  "fr-micro-turnover",
      +  "fr-payroll-dsn",
      +  "fr-payroll-dsn-contributions"
      +]
    • changedOutput schema / properties / undated / items / properties / missing / items / enum
      Previous value: -[
      -  "legal_form",
      -  "vat_regime",
      -  "vat_filing_frequency",
      -  "corporate_tax_regime",
      -  "fiscal_year_end",
      -  "urssaf_filing_frequency"
      -]New value: +[
      +  "legal_form",
      +  "vat_regime",
      +  "vat_filing_frequency",
      +  "corporate_tax_regime",
      +  "fiscal_year_end",
      +  "urssaf_filing_frequency",
      +  "payroll_contribution_payment_frequency"
      +]
  2. Changed10 schema fields changed
    • removedOutput schema / properties / country_code / anyOf
      Removed value: -[
      -  {
      -    "type": "string"
      -  },
      -  {
      -    "type": "null"
      -  }
      -]
    • addedOutput schema / properties / country_code / type
      Added value: +[
      +  "string",
      +  "null"
      +]
    • removedOutput schema / properties / profile / properties / legal_form / anyOf
      Removed value: -[
      -  {
      -    "type": "string"
      -  },
      -  {
      -    "type": "null"
      -  }
      -]
    • addedOutput schema / properties / profile / properties / legal_form / type
      Added value: +[
      +  "string",
      +  "null"
      +]
    • removedOutput schema / properties / profile / properties / micro_acre_end_date / anyOf
      Removed value: -[
      -  {
      -    "type": "string"
      -  },
      -  {
      -    "type": "null"
      -  }
      -]
    • addedOutput schema / properties / profile / properties / micro_acre_end_date / type
      Added value: +[
      +  "string",
      +  "null"
      +]
    • removedOutput schema / properties / profile / properties / micro_acre_start_date / anyOf
      Removed value: -[
      -  {
      -    "type": "string"
      -  },
      -  {
      -    "type": "null"
      -  }
      -]
    • addedOutput schema / properties / profile / properties / micro_acre_start_date / type
      Added value: +[
      +  "string",
      +  "null"
      +]
    • removedOutput schema / properties / resolved_workspace / properties / name / anyOf
      Removed value: -[
      -  {
      -    "type": "string"
      -  },
      -  {
      -    "type": "null"
      -  }
      -]
    • addedOutput schema / properties / resolved_workspace / properties / name / type
      Added value: +[
      +  "string",
      +  "null"
      +]
  3. Changed6 schema fields changed
    • addedOutput schema / properties / profile / properties / flat_income_tax_option
      Added value: +{
      +  "anyOf": [
      +    {
      +      "enum": [
      +        "opted",
      +        "not_opted"
      +      ],
      +      "type": "string"
      +    },
      +    {
      +      "type": "null"
      +    }
      +  ]
      +}
    • addedOutput schema / properties / profile / properties / micro_acre
      Added value: +{
      +  "anyOf": [
      +    {
      +      "enum": [
      +        "granted",
      +        "not_granted"
      +      ],
      +      "type": "string"
      +    },
      +    {
      +      "type": "null"
      +    }
      +  ],
      +  "description": "Null means nobody asked whether ACRE applies."
      +}
    • addedOutput schema / properties / profile / properties / micro_acre_end_date
      Added value: +{
      +  "anyOf": [
      +    {
      +      "type": "string"
      +    },
      +    {
      +      "type": "null"
      +    }
      +  ],
      +  "description": "YYYY-MM-DD; null means not known."
      +}
    • addedOutput schema / properties / profile / properties / micro_acre_start_date
      Added value: +{
      +  "anyOf": [
      +    {
      +      "type": "string"
      +    },
      +    {
      +      "type": "null"
      +    }
      +  ],
      +  "description": "YYYY-MM-DD; null means not known."
      +}
    • addedOutput schema / properties / profile / properties / micro_activity_regime
      Added value: +{
      +  "anyOf": [
      +    {
      +      "enum": [
      +        "goods",
      +        "services_bic",
      +        "services_bnc"
      +      ],
      +      "type": "string"
      +    },
      +    {
      +      "type": "null"
      +    }
      +  ]
      +}
    • changedOutput schema / properties / profile / required
      Previous value: -[
      -  "legal_form",
      -  "vat_regime",
      -  "vat_filing_frequency",
      -  "corporate_tax_regime",
      -  "fiscal_year_start_month",
      -  "urssaf_filing_frequency"
      -]New value: +[
      +  "legal_form",
      +  "vat_regime",
      +  "vat_filing_frequency",
      +  "corporate_tax_regime",
      +  "fiscal_year_start_month",
      +  "urssaf_filing_frequency",
      +  "micro_activity_regime",
      +  "flat_income_tax_option",
      +  "micro_acre",
      +  "micro_acre_start_date",
      +  "micro_acre_end_date"
      +]
  4. Changed7 schema fields changed
    • changedOutput schema / properties / deadlines / items / properties / condition / anyOf
      Previous value: -[
      -  {
      -    "enum": [
      -      "prior_year_tax_above_3000_eur",
      -      "not_the_creation_year",
      -      "approval_on_last_allowed_day"
      -    ],
      -    "type": "string"
      -  },
      -  {
      -    "type": "null"
      -  }
      -]New value: +[
      +  {
      +    "enum": [
      +      "prior_year_tax_above_3000_eur",
      +      "not_the_creation_year",
      +      "approval_on_last_allowed_day",
      +      "day_set_per_company",
      +      "day_from_prior_return",
      +      "first_declaration_date_assumed"
      +    ],
      +    "type": "string"
      +  },
      +  {
      +    "type": "null"
      +  }
      +]
    • changedOutput schema / properties / deadlines / items / properties / id / enum
      Previous value: -[
      -  "fr-vat-ca3",
      -  "fr-vat-ca12",
      -  "fr-vat-ca12-instalment",
      -  "fr-corporate-tax-instalment",
      -  "fr-corporate-tax-balance",
      -  "fr-corporate-tax-return",
      -  "fr-cfe",
      -  "fr-annual-accounts"
      -]New value: +[
      +  "fr-vat-ca3",
      +  "fr-vat-ca12",
      +  "fr-vat-ca12-instalment",
      +  "fr-corporate-tax-instalment",
      +  "fr-corporate-tax-balance",
      +  "fr-corporate-tax-return",
      +  "fr-cfe",
      +  "fr-annual-accounts",
      +  "fr-micro-turnover"
      +]
    • changedOutput schema / properties / not_owed / items / enum
      Previous value: -[
      -  "fr-vat-ca3",
      -  "fr-vat-ca12",
      -  "fr-vat-ca12-instalment",
      -  "fr-corporate-tax-instalment",
      -  "fr-corporate-tax-balance",
      -  "fr-corporate-tax-return",
      -  "fr-cfe",
      -  "fr-annual-accounts"
      -]New value: +[
      +  "fr-vat-ca3",
      +  "fr-vat-ca12",
      +  "fr-vat-ca12-instalment",
      +  "fr-corporate-tax-instalment",
      +  "fr-corporate-tax-balance",
      +  "fr-corporate-tax-return",
      +  "fr-cfe",
      +  "fr-annual-accounts",
      +  "fr-micro-turnover"
      +]
    • addedOutput schema / properties / profile / properties / urssaf_filing_frequency
      Added value: +{
      +  "anyOf": [
      +    {
      +      "enum": [
      +        "monthly",
      +        "quarterly"
      +      ],
      +      "type": "string"
      +    },
      +    {
      +      "type": "null"
      +    }
      +  ]
      +}
    • changedOutput schema / properties / profile / required
      Previous value: -[
      -  "legal_form",
      -  "vat_regime",
      -  "vat_filing_frequency",
      -  "corporate_tax_regime",
      -  "fiscal_year_start_month"
      -]New value: +[
      +  "legal_form",
      +  "vat_regime",
      +  "vat_filing_frequency",
      +  "corporate_tax_regime",
      +  "fiscal_year_start_month",
      +  "urssaf_filing_frequency"
      +]
    • changedOutput schema / properties / undated / items / properties / id / enum
      Previous value: -[
      -  "fr-vat-ca3",
      -  "fr-vat-ca12",
      -  "fr-vat-ca12-instalment",
      -  "fr-corporate-tax-instalment",
      -  "fr-corporate-tax-balance",
      -  "fr-corporate-tax-return",
      -  "fr-cfe",
      -  "fr-annual-accounts"
      -]New value: +[
      +  "fr-vat-ca3",
      +  "fr-vat-ca12",
      +  "fr-vat-ca12-instalment",
      +  "fr-corporate-tax-instalment",
      +  "fr-corporate-tax-balance",
      +  "fr-corporate-tax-return",
      +  "fr-cfe",
      +  "fr-annual-accounts",
      +  "fr-micro-turnover"
      +]
    • changedOutput schema / properties / undated / items / properties / missing / items / enum
      Previous value: -[
      -  "legal_form",
      -  "vat_regime",
      -  "vat_filing_frequency",
      -  "corporate_tax_regime",
      -  "fiscal_year_end"
      -]New value: +[
      +  "legal_form",
      +  "vat_regime",
      +  "vat_filing_frequency",
      +  "corporate_tax_regime",
      +  "fiscal_year_end",
      +  "urssaf_filing_frequency"
      +]
  5. Added

TDQS

A4.5/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnly/openWorld=false, but the description adds substantial context beyond them: it reads the stored profile, reads no tax site, stores nothing; it enumerates the `deadlines`/`undated`/`not_owed` partitions, the seven `condition` codes with their real-world meaning (e.g. prior_year_tax_above_3000_eur, day_set_per_company, fewer_than_50_employees), and the terminal statuses unsupported_jurisdiction and failed ("never empty"). It also imposes a hard output constraint: "Never state a date that is not in `deadlines`."

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness3/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The purpose and the skill routing are front-loaded and well marked with bold labels, which is good. However the body sprawls into a long enumeration of every deadline type and every condition code, much of which duplicates the tool's output schema rather than helping an agent choose or invoke the tool, and the sentences are extremely dense run-ons.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a read-only computation tool with full schema coverage, annotations, and an output schema, the description covers everything an agent needs: what it computes from, what it never does (no tax-site reads, no writes), how to handle missing profile keys and unsupported legal forms, what to do on failure, and which sibling tool to combine it with.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, so the schema already documents all four parameters, including the `months` default/range and the workspace_id omission rule; the description mostly restates these. It adds no guidance for `conversation_id` or `workspace_scope` beyond what the schema text says, so baseline 3 applies.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The opening states a specific verb and resource with scope: "List a French company's or micro-entrepreneur's upcoming tax deadlines, computed from its tax profile," then enumerates exactly which obligations (CA3/CA12, corporate tax instalments, CFE, annual accounts, DSN/URSSAF, micro turnover declaration) are covered. It is clearly distinguishable from siblings like well_list_tax_returns or well_get_vat_summary.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

It explicitly routes the agent: a tax-deadline question "does not start here" and must go through the `vat-radar` skill via well_get_skill first. It also names the complementary tool ("For the VAT amount of a period, call `well_get_vat_summary` as well") and gives the multi-workspace rule (call directly for one workspace, pass `workspace_id` for several).

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

Try in Browser

Glama MCP Gateway

Add one secure layer between your agents and this server.

Resources