SEFAZ SP: Cadin
Server Details
SEFAZ SP: Cadin, official-source lookup. Platform-hosted, pay per query with prepaid credit.
- Status
- Healthy
- Last Tested
- Transport
- Streamable HTTP
- URL
- Repository
- mcp-dir/sefaz_sp_cadin-mcp
- GitHub Stars
- 0
Glama MCP Gateway
Connect through Glama MCP Gateway for full control over tool access and complete visibility into every call.
Full call logging
Every tool call is logged with complete inputs and outputs, so you can debug issues and audit what your agents are doing.
Tool access control
Enable or disable individual tools per connector, so you decide what your agents can and cannot do.
Managed credentials
Glama handles OAuth flows, token storage, and automatic rotation, so credentials never expire on your clients.
Usage analytics
See which tools your agents call, how often, and when, so you can understand usage patterns and catch anomalies.
Tool Definition Quality
Average 4/5 across 7 of 7 tools scored. Lowest: 3.1/5.
Most tools have distinct purposes, but connect and toolkit_info both report connection status, which could cause misselection. The other tools (authenticate, marketplace, report_bug, show_version) are clearly distinct from each other and from sefaz_sp_cadin_consultar.
Tool names follow no consistent pattern: some are single verbs (authenticate, connect, report_bug), some are noun phrases (marketplace, toolkit_info), and one is a long domain-specific name (sefaz_sp_cadin_consultar). Mixed styles with no uniform verb_noun convention.
Seven tools is within the typical appropriate range, but the server is named for a specific domain (SEFAZ SP Cadin) while only one tool is domain-specific; the rest are generic platform utilities. This bloat is slight but still reasonable for a platform-style server.
The core domain operation—consulting Cadin—is covered by sefaz_sp_cadin_consultar, which appears sufficient for the stated purpose. However, the toolset lacks any additional domain-specific actions (e.g., bulk queries or result history), though these may not be necessary.
Available Tools
7 toolsauthenticateAIdempotentInspect
MCP.AI for IDE agents (Cursor, etc.): log in in the browser, copy the access token. Best: add it to this server's config as a header Authorization: Bearer <token> for a permanent, non-expiring connection. Or paste it here for a session-only login: call with { token: "" } after the user pastes, or with no args to get the link.
| Name | Required | Description | Default |
|---|---|---|---|
| token | No |
Tool Definition Quality
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The description discloses behavioral traits beyond annotations, such as the two modes (permanent vs session-only) and that calling with no args returns a link. It does not contradict the annotations (readOnlyHint=false, idempotentHint=true) and adds practical context about the effects of different calls.
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 concise, with three sentences covering purpose, best practice, and alternative. It is well-structured and front-loaded, with no unnecessary words.
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 simplicity of the tool (one optional param, no output schema), the description is complete. It explains the two invocation modes and the expected behavior. It does not describe the returned link's format, but that is not critical for usage.
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 a single optional 'token' parameter with no description. The description compensates by explaining that providing a token triggers a session login, and omitting it generates a link. This adds meaning beyond the schema's empty description.
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's purpose: to authenticate IDE agents by logging in and obtaining an access token. It specifies the action (log in) and the resource (the server), but does not explicitly differentiate it from the sibling 'connect' tool, making it slightly less than perfect.
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 explicit usage scenarios: adding the token to config for a permanent connection, or pasting it for a session-only login, and calling with no args to get the link. It does not mention when to use this over the sibling 'connect', but gives clear context for its own usage.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
connectARead-onlyIdempotentInspect
Returns connection status and URLs. When all providers are connected, returns authenticated:true and empty pending[]. When credentials are missing, returns connect_url for the toolkit and per-install URLs.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
Tool Definition Quality
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already indicate read-only, idempotent, and non-destructive behavior. The description adds valuable conditional detail about the response shape (authenticated:true, empty pending[], connect_url, per-install URLs), going beyond the basic annotation safety profile.
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 main purpose, and no unnecessary wording. Every clause earns its place by explaining a distinct outcome.
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 no output schema, the description covers the main return states (all connected vs. missing credentials) and the key fields (authenticated, pending, connect_url). It could mention partial-connection edge cases, but the tool is simple and the description is largely sufficient.
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 tool has zero parameters, so parameter-level guidance is not needed. Per the rubric, 0 params receives a baseline of 4, and the description appropriately focuses on behavior rather than inputs.
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 ('Returns') and clearly identifies the resource (connection status and URLs). It is distinct from siblings like authenticate or show_version, though it does not explicitly contrast itself with them.
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 conditional context ('When all providers are connected... When credentials are missing...') that implies when the tool is useful, but it does not explicitly say when to use this tool versus alternatives like authenticate. Usage is implied rather than stated.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
marketplaceAInspect
The official mcp.ai marketplace — the in-platform catalog of every MCP/tool, AND the way to run them. Covers capability requests like "find an MCP that does X", "consulta um CPF", "is there a tool for Y". Core flow: action=search discovers MCPs by intent → describe returns one MCP's full profile (every tool with its id + params, pricing, auth) so you pick the right tool_id → invoke RUNS that tool. KEY: invoke works even when the MCP is NOT installed — it runs the tool pontualmente (one-off), without adding the MCP to the toolkit and without bloating the tool list. If the MCP needs a credential/login, invoke returns a connect link; if it is paid and the wallet is empty, invoke returns a checkout/top-up link (the user opens it, then you retry). Use install only to make an MCP PERMANENT in the active toolkit (its tools then show up natively in future sessions); prefer invoke for a single/occasional use. list_tools lists what is callable right now. subscribe/cancel handle per-MCP billing; report_bug sends feedback; request_mcp asks us to build a NEW MCP when nothing fits. Search/describe flag installed_in_toolkit vs installed_in_workspace. Writes (install/uninstall/subscribe/cancel and the one-off install behind invoke) require workspace owner/admin. It also carries the mcp.ai PROMPT LIBRARY, which is about ready-made prompt TEXT rather than MCPs: search_prompts finds one, get_prompt returns its full text with {{variables}} filled, and publish_prompt saves a prompt and returns a shareable mcp.ai/p/ link that opens without login.
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | ||
| query | No | ||
| action | No | search | |
| mcp_id | No | ||
| message | No | ||
| tool_id | No | ||
| arguments | No | {} | |
| immediate | No | ||
| tier_slug | No | ||
| prompt_body | No | ||
| prompt_slug | No | ||
| prompt_tool | No | ||
| prompt_vars | No | {} | |
| conversation | No | [] | |
| prompt_title | No | ||
| request_name | No | ||
| cancel_reason | No | ||
| cancel_comment | No | ||
| prompt_targets | No | ||
| report_context | No | ||
| prompt_category | No | ||
| request_details | No | ||
| prompt_description | No |
Tool Definition Quality
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Beyond the annotations (readOnlyHint=false, destructiveHint=false), the description adds essential behavioral context: it discloses that invoke executes even without installation, returns a connect link for auth, and returns a checkout/top-up link for payment. It explicitly states that writes (install, subscribe, cancel, and the install behind invoke) require owner/admin permissions. It also clarifies the distinction between running a tool and installing it into the toolkit. No contradictions with 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 dense paragraph but is front-loaded with the purpose and core flow. It uses arrows and explicit action names to structure the mental model. While lengthy, it avoids fluff and packs essential distinctions (installed vs. invoked, payment links, prompt publishing). It could be broken into bullets for scannability, but the logical flow is clear and efficient.
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 no output schema and 23 parameters, the description compensates by explaining the main action enum in detail (search, describe, install, invoke, prompt actions), the execution model (invoke works without installation, returns auth/payment links), permission requirements ('Writes require workspace owner/admin'), and the prompt-sharing feature. It covers edge cases like credential needs and payment failures. This gives the agent enough context to decide when and how to use the 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?
Schema coverage is 0%, so the description must compensate. It explains the critical 'action' parameter in detail (all 14 enum values are described through the workflow), and clarifies key identifiers like 'tool_id' and 'mcp_id' (though not by name, but by context). It does not individually document all 23 parameters (e.g., 'limit', 'tier_slug', 'cancel_reason'), but the description provides enough context for an agent to infer type and purpose from the action-specific explanations. This exceeds minimal compensation but doesn't enumerate every parameter explicitly.
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 explicitly identifies the marketplace as 'the official mcp.ai marketplace' and details its dual role: cataloging MCPs/tools and executing actions via 'action' parameter. It clearly enumerates the distinct capabilities (search, describe, invoke, install, subscribe, etc.) and differentiates from sibling tools like 'connect' or 'toolkit_info' by framing itself as the central catalog and execution engine. The verb and resource are specific and unambiguous.
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?
Provides explicit guidance on when to use each action: 'search → describe → invoke' core flow, and explicitly states 'prefer invoke for a single/one-off' vs 'Use install to make an MCP PERMANENT'. It also differentiates between the marketplace's prompt functions ('search_prompts', 'get_prompt', 'publish_prompt') and MCP operations. Mentions permission requirements for write actions, and explains when links (connect, checkout) are returned. This is model-level guidance.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
report_bugBIdempotentInspect
Report a bug, missing feature, or send feedback. Include the conversation array with recent messages for reproduction.
| Name | Required | Description | Default |
|---|---|---|---|
| context | No | ||
| message | Yes | ||
| conversation | No | [] |
Tool Definition Quality
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations indicate idempotentHint=true and destructiveHint=false, which are already provided. The description adds that the conversation array should be included for reproduction, which is a behavioral detail beyond annotations. However, it doesn't disclose what happens after reporting (e.g., whether it creates a ticket, sends an email) or any side effects. With annotations covering safety, a 3 is appropriate.
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 concise, two sentences, and front-loaded with the purpose. It includes a key usage hint about the conversation array. No wasted words, but it could be slightly more structured with parameter details.
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 tool has 3 parameters with 0% schema coverage and no output schema, the description is insufficient. It doesn't explain the 'context' parameter, the format of 'message', or what the response will be. The conversation parameter is mentioned but not fully specified. For a reporting tool, more detail on expected input and outcome is needed.
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 0%, so the description must compensate. It mentions 'conversation array' but the schema defines 'conversation' as a string with default '[]', which is ambiguous. The description doesn't explain the 'context' parameter or the format of 'message'. It adds minimal value beyond the schema, and the conversation parameter is only partially explained.
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's purpose: 'Report a bug, missing feature, or send feedback.' It uses a specific verb ('report') and resource ('bug'), and distinguishes from siblings by covering feedback and feature requests. However, it doesn't explicitly differentiate from other tools like 'connect' or 'marketplace', but the purpose is clear enough.
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 when to use this tool (when reporting bugs, missing features, or feedback) but does not explicitly state when not to use it or mention alternatives. It provides a hint about including the conversation array for reproduction, which is useful context, but lacks explicit exclusions or alternative tool references.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
sefaz_sp_cadin_consultarARead-onlyIdempotentInspect
SEFAZ SP: Cadin, consulta em fonte oficial. Hospedado pela plataforma, sem credenciais da plataforma, pague por consulta com crédito pré-pago. Consulta informação de fontes e órgãos oficiais brasileiros (a mesma disponível ao cidadão), não é dado sigiloso. O cliente é o controlador dos dados e responde pela finalidade legítima (LGPD).
| Name | Required | Description | Default |
|---|---|---|---|
| cpf | No | ||
| cnpj | No | ||
| nome | No |
Tool Definition Quality
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already indicate readOnly, idempotent, and non-destructive. The description adds meaningful context about the data source, LGPD compliance, and the fact that data is not confidential, going beyond the annotations without contradicting them.
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 concise and front-loaded with the tool's purpose. It packs useful information into three sentences, though the LGPD clause is somewhat dense and could be simplified.
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?
For a simple consult tool, the description covers the main aspects (what, source, payment, data governance). However, it lacks details about the return format, possible error conditions, and parameter usage, which are not supplied by an output schema or parameter descriptions.
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 0% description coverage and the description does not explain the parameters (cpf, cnpj, nome). Although the names are self-evident, the description fails to add any nuance about querying by these fields, required combinations, or formatting.
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 performs a consulta (query) to Cadin from SEFAZ SP, using an official source. It distinguishes itself from sibling tools (authenticate, connect, etc.) by specifying its resource and action.
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 gives useful usage context (no platform credentials, prepaid credit per query), but it does not explicitly state when to choose this tool over alternatives or provide exclusion criteria. The intended use case is implied rather than directly articulated.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
show_versionARead-onlyIdempotentInspect
Show the current MCP platform and adapter versions.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
Tool Definition Quality
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true and idempotentHint=true, and the description's 'Show' wording is consistent. It adds the detail that both MCP platform and adapter versions are returned, which is useful but not entirely necessary given the simple nature of the tool.
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?
A single, front-loaded sentence delivers the exact purpose with no fluff. Every word earns its place.
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?
For a version-listing tool with no parameters and no output schema, the description is sufficiently complete. It could have mentioned the lack of side effects or the fact that it's safe to call anytime, but given the tool's simplicity, this level is adequate.
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?
With 0 parameters and 100% schema coverage, the baseline is 4. The description correctly implies a parameterless call, and no additional semantics are required.
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 'Show the current MCP platform and adapter versions.' It uses a specific verb (Show) and a specific resource (MCP platform and adapter versions), and it is distinct from sibling tools like 'connect' or 'authenticate'.
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?
No guidance is provided on when to use this tool versus alternatives such as 'toolkit_info' or 'marketplace'. There is no mention of exclusions, prerequisites, or typical use cases, so the agent receives no comparative context.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
toolkit_infoARead-onlyIdempotentInspect
Returns the current toolkit state: installed MCPs, their connection status, the accounts connected to each one, and how many catalog tools each exposes.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
Tool Definition Quality
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint, idempotentHint, and destructiveHint as false. The description adds valuable context beyond annotations by specifying exactly what information is returned (installed MCPs, connection status, accounts, and tool exposure counts), which helps infer the read-only nature and outputs. It doesn't mention any rate limits or caveats, but given the annotation coverage, this is adequate.
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 sentence that is entirely informative, with no filler or redundancy. It clearly enumerates the key information without any wasted words, making it both concise and structured.
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 this is a simple status-report tool with no parameters and no output schema, the description fully covers the expected return content (all elements are listed). It also aligns with the annotations. There is no missing context that would hinder an agent's understanding.
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 tool has zero parameters, and the schema confirms this (100% schema description coverage). No parameters means the description doesn't need to elaborate on them. Baseline for zero parameters is 4, and the description doesn't add unnecessary param information.
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 'Returns' and clearly specifies the resource ('current toolkit state') and includes a detailed list of what that state comprises (installed MCPs, connection status, accounts, and tool counts). This clearly distinguishes it from sibling tools like 'authenticate' or 'connect' which serve different purposes.
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 implicitly conveys that this tool is for inspecting toolkit state rather than modifying it. It doesn't explicitly compare with alternatives like 'show_version' or 'marketplace', but the content makes it clear it's for status queries. The absence of explicit 'use this when...' statements is a minor gap, hence 4.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
Claim this connector by publishing a /.well-known/glama.json file on your server's domain with the following structure:
{
"$schema": "https://glama.ai/mcp/schemas/connector.json",
"maintainers": [{ "email": "your-email@example.com" }]
}The email address must match the email associated with your Glama account. Once published, Glama will automatically detect and verify the file within a few minutes.
Control your server's listing on Glama, including description and metadata
Access analytics and receive server usage reports
Get monitoring and health status updates for your server
Feature your server to boost visibility and reach more users
For users:
Full audit trail – every tool call is logged with inputs and outputs for compliance and debugging
Granular tool control – enable or disable individual tools per connector to limit what your AI agents can do
Centralized credential management – store and rotate API keys and OAuth tokens in one place
Change alerts – get notified when a connector changes its schema, adds or removes tools, or updates tool definitions, so nothing breaks silently
For server owners:
Proven adoption – public usage metrics on your listing show real-world traction and build trust with prospective users
Tool-level analytics – see which tools are being used most, helping you prioritize development and documentation
Direct user feedback – users can report issues and suggest improvements through the listing, giving you a channel you would not have otherwise
The connector status is unhealthy when Glama is unable to successfully connect to the server. This can happen for several reasons:
The server is experiencing an outage
The URL of the server is wrong
Credentials required to access the server are missing or invalid
If you are the owner of this MCP connector and would like to make modifications to the listing, including providing test credentials for accessing the server, please contact support@glama.ai.
Discussions
No comments yet. Be the first to start the discussion!
Related MCP Servers
- Alicense-qualityCmaintenanceEnables agents to check whether a CPF or CNPJ is registered in the São Paulo state CADIN (debtor registry), returning its situation. Read-only, works over MCP HTTP with any client.MIT
- -license-quality-maintenanceEnables querying SEFAZ's centralized taxpayer registration (CCC) from the official source via a read-only tool. Pay-per-use with prepaid credits.
- Alicense-qualityCmaintenanceMCP server to query Brazilian state CADIN registry for CPF/CNPJ, providing debt situation across state finance departments. Read-only and works with any MCP client.MIT
- Alicense-qualityCmaintenanceProvides query access to official SINTEGRA SE data through a single read-only MCP tool, with pay-per-use credits and no platform credentials required.MIT