SEFAZ SC: Certidão Negativa de Débitos
Server Details
SEFAZ SC: Clearance Certificate (Debts), official-source lookup. Platform-hosted, pay per query with
- Status
- Healthy
- Last Tested
- Transport
- Streamable HTTP
- URL
- Repository
- mcp-dir/sefaz_sc_certidao_debitos-mcp
- GitHub Stars
- 0
- Server Listing
- SEFAZ SC: Certidão Negativa de Débitos
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.1/5 across 7 of 7 tools scored.
authenticate, connect, marketplace, and toolkit_info all describe platform credentials, connection status, or callable-MCP state, making their boundaries unclear in practice. The SEFAZ consult tool is clearly distinct, but several generic platform tools could be selected for the wrong purpose.
Naming is a mix of imperative verbs (authenticate, report_bug, show_version), bare nouns (marketplace, connect, toolkit_info), and a long Portuguese snake_case domain tool (sefaz_sc_certidao_debitos_consultar). There is no predictable convention that groups tools by function.
Seven tools is not inherently excessive, but only one tool directly serves the advertised SEFAZ certidão purpose. The other six are generic MCP platform and management utilities, making the toolkit feel overprovisioned for the advertised domain and unfocused overall.
The core SEFAZ consultation operation exists, and the platform provides authentication, connection checks, and bug reporting. However, the domain surface is thin: there are no SEFAZ-specific result validation, retry, detailed error handling, or alternative access paths beyond one consult call.
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 explains that calling with no args returns a link for browser login, and that passing a token grants session-only access. It also mentions the permanent config option. However, it does not disclose what happens after successful authentication, any side effects (like storing the token), or the exact return format. Given annotations indicate idempotent and non-destructive, the description adds some value but could be more explicit about the session vs permanent distinction's implications.
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 run-on sentence that is overly dense and somewhat confusing with the 'MCP.AI for IDE agents (Cursor, etc.):' prefix. It front-loads the audience but packs too many instructions into one sentence, making it harder to parse. It could be broken into clearer sentences.
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 tool with no output schema and only one optional parameter, the description covers the essential usage paths: browser login, token paste, and permanent config. It explains the two invocation modes and the alternative configuration. It could detail response behavior (e.g., success/failure messages) but is fairly complete for the tool's complexity.
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 only defines 'token' as a string with no description, so coverage is 0%. The description compensates by explaining that the 'token' should be a JWT pasted by the user, and that calling without args returns a link. It adds semantic meaning beyond the schema, though it doesn't specify token format details like expiration or validation.
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 with MCP.AI by providing a token or obtaining a login link. It distinguishes itself from siblings (connect, marketplace, etc.) by specifying the authentication flow. However, the description is a bit convoluted and mixes instructions for IDE agents with token handling, making the core action less crisp than it could be.
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 usage context: when to use it (for authentication) and when to use the alternative (adding token to server config for permanent connection). It explains two modes: session-only with token argument, and obtaining a link with no args. It doesn't explicitly mention when NOT to use it, but the alternatives are implied.
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 declare readOnlyHint, idempotentHint, and non-destructive behavior. The description adds meaningful conditional behavior beyond that: it specifies exactly what happens when all providers are connected versus when credentials are missing, including the returned fields (authenticated, pending[], connect_url, per-install URLs).
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 core purpose, and every clause adds useful information. The conditional scenarios are compactly conveyed without unnecessary elaboration.
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 zero-parameter read-only status tool, the description covers the main return values and both operational states. No output schema exists, but the conditional response behavior is fully described, making the tool complete for an agent to understand its outcome.
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 the baseline is 4. The empty schema already covers 100% of parameters, and the description provides no parameter-specific information, which is appropriate since there are none.
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') with a clear resource ('connection status and URLs'). It also distinguishes this tool from siblings like 'authenticate' by focusing on status inspection rather than performing authentication. The conditional output detail further clarifies its purpose.
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 the tool: to check whether all providers are connected or to retrieve connection URLs when credentials are missing. It does not explicitly name alternative tools or exclusion criteria, but the context is clear enough for a zero-parameter status tool.
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, it discloses the one-off nature of invoke (works without install, no tool-list bloat), credential/payment redirect behavior, installed_in_toolkit vs installed_in_workspace flags, and owner/admin permission requirements for writes. These are meaningful execution-relevant traits not carried by readOnlyHint or destructiveHint.
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 dense but deliberately structured with 'Core flow', 'KEY', and explicit install-vs-invoke guidance. It is a long single paragraph; bullet formatting or section breaks would improve scanability, but every sentence contributes useful information.
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 14-action meta-tool with no output schema, it covers discovery, invocation, install, billing, permissions, and prompt-library behavior well. It is missing explicit details on the 'resume' action and does not describe the search result shape, but the overall workflow leaves few critical gaps.
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% schema description coverage and 23 parameters, the description carries the burden and largely succeeds by explaining the action enum's semantics and the purpose of mcp_id, tool_id, and prompt_* parameters. However, several parameters such as limit, query, immediate, tier_slug, report_context, and request_name are left to naming inference rather than explicit explanation.
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 opens with a concrete definition: 'official mcp.ai marketplace — in-platform catalog of every MCP/tool, AND the way to run them.' It then names the core search→describe→invoke flow, which distinguishes this tool from sibling tools like authenticate, connect, and toolkit_info.
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?
It gives explicit selection guidance: 'Use install only to make an MCP PERMANENT' and 'prefer invoke for a single/occasional use.' It also explains when to use search_prompts/get_prompt/publish_prompt and describes follow-up behavior for connect/checkout links, making when-to-use and alternatives clear.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
report_bugAIdempotentInspect
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 already provide readOnly, destructive, and idempotency hints. The description adds useful context by explaining that the conversation array is for reproduction, but it doesn't describe what happens after submission, whether duplicates are possible, or the response shape. There is no contradiction with the 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 two short sentences, front-loaded with the core purpose, and contains no filler. Every sentence contributes actionable guidance.
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 bug/feedback tool, the core usage is clear and the reproduction instruction is valuable. However, the 'context' parameter is not explained, and with no output schema and minimal annotations, the description leaves some ambiguity about expected behavior and result.
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 explains the role of 'conversation' but describes it as an 'array' while the schema declares it as a string, which is potentially misleading. It leaves 'context' undocumented and only implicitly clarifies 'message.'
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 with specific verbs: 'Report a bug, missing feature, or send feedback.' This distinguishes it from the unrelated sibling tools like authenticate, connect, and marketplace.
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?
It gives explicit when-to-use guidance by enumerating bug reports, feature requests, and feedback, and it instructs the caller to include the conversation array for reproduction. It doesn't explicitly name alternatives, but the sibling tools are clearly unrelated.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
sefaz_sc_certidao_debitos_consultarARead-onlyIdempotentInspect
SEFAZ SC: Certidão Negativa de Débitos, 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_contribuinte | No | ||
| preferencia_emissao | No |
Tool Definition Quality
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare read-only, idempotent, non-destructive behavior. The description usefully adds that the query costs prepaid credits, requires no platform credentials, processes non-confidential official data, and involves LGPD obligations. This goes beyond the annotations and helps the agent understand cost, legal, and data governance traits.
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 compact and front-loads the main purpose, then briefly covers operational, cost, confidentiality, and legal points. It could be slightly more concise by merging the LGPD and business terms, but overall the length is reasonable and every sentence contributes meaningful context.
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 read-only query tool with four self-describing parameter names, the description provides good contextual detail about cost, hosting, and legal aspects. However, because there is no output schema, it doesn't describe the return structure or content, nor does it clarify at least one identifier (CPF/CNPJ) must be provided, leaving some ambiguity for the agent.
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 four parameters (cpf, cnpj, nome_contribuinte, preferencia_emissao). While the property names are fairly self-explanatory for a Brazilian audience, the description adds no clarification about formats, required combinations, or constraints, so it fails to fill the schema documentation gap.
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 specifies the exact resource and action: 'SEFAZ SC: Certidão Negativa de Débitos, consulta em fonte oficial.' This clearly identifies it as a query tool for a specific Brazilian official tax debt certificate and distinguishes it from the platform-level sibling tools (authenticate, connect, marketplace, etc.).
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 useful context: it is an official-source query, hosted by the platform, requires no platform credentials, and consumes prepaid credits. However, it does not explicitly state when to use this tool versus alternatives or what preconditions apply (e.g., which identifier must be provided), though no sibling tool appears to be a direct alternative.
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, idempotentHint=true, and destructiveHint=false, so the safety profile is clear. The description adds no additional behavioral context beyond what the annotations provide, but it does not contradict 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 a single, clear sentence with no filler or redundant content. It is front-loaded with the action and immediately specifies the exact resource being reported.
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 zero-parameter, read-only version tool with strong annotations, the description is complete. No output schema is present, but the tool's output is self-evident from the description, so no further context 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?
The input schema has zero parameters and 100% schema description coverage, so the description has no parameter burden. The baseline for zero parameters is 4, and the description adequately supports the tool's simple interface.
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 and resource: 'Show the current MCP platform and adapter versions.' This clearly identifies the tool's function and distinguishes it from the sibling tools, which involve authentication, connection, marketplace, and bug reporting.
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 the tool should be used when version information is needed, but it does not explicitly state when to use this over alternatives like toolkit_info, nor does it provide exclusions. Usage context is present but implicit.
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=true, idempotentHint=true, and destructiveHint=false. The description adds value by specifying the behavioral scope of the read: it reports installed MCPs, connection statuses, accounts, and catalog tool counts. This gives the agent a concrete expectation of what the state snapshot includes.
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 immediately identifies the tool's purpose and then lists the four key output categories. Every clause adds information, with no filler 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?
With no output schema and no parameters, the description must convey what the tool returns, and it does so clearly by naming the main data categories. It could be slightly richer by noting the response shape or nesting, but for a simple state-read tool with strong annotations, this is 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 there is no parameter semantics to clarify. The baseline for 0 params is 4, and the description appropriately focuses on return contents 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 a clear resource ('current toolkit state'), then enumerates the exact contents: installed MCPs, connection status, connected accounts, and catalog tool counts. This clearly distinguishes it from sibling tools like show_version, which would cover only version info.
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 states what the tool does but provides no explicit guidance on when to prefer it over alternatives or any exclusions. Its diagnostic purpose is implied, but it does not say something like 'use this before connect to check statuses' or contrast with sibling tools.
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 querying Brazilian state tax clearance certificates (Certidão Negativa de Débitos Estaduais) from official sources via a read-only, hosted MCP tool with pay-per-use access.MIT
- Alicense-qualityCmaintenanceEnables consulting Brazilian federal tax debt certificates (CND) from the official PGFN source through a read-only MCP tool, with pay-per-use hosted access.MIT
- Alicense-qualityCmaintenanceEnables querying SEFAZ's centralized taxpayer registration (CCC) from the official source via a read-only tool. Pay-per-use with prepaid credits.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
Your Connectors
Sign in to create a connector for this server.