naija-faker-mcp
This server provides a collection of MCP tools for generating fake, culturally authentic Nigerian data across people, contact, identity, financial, educational, and vehicle domains, with options for language (Yoruba, Igbo, Hausa), gender, and geographic consistency.
Generate basic or detailed fake person records, including consistent versions with geographically coherent state, LGA, and ethnicity.
Generate individual Nigerian data points: names, titles, emails, phone numbers, addresses, NIN, BVN, license plates, and bank accounts.
Generate composite records: vehicle records, companies, universities, education records, work records, next of kin, and salary details.
Generate lists of people (basic, detailed, or geographically consistent) with customizable counts.
Generate demographic and health attributes: date of birth, marital status, blood group, and genotype.
Generate lists of Nigerian states and LGAs.
Customize outputs by language (Hausa, Igbo, Yoruba), gender (male/female), phone network (MTN, Glo, Airtel, 9mobile), salary level, and other parameters.
Click on "Deploy 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., "@naija-faker-mcpGenerate a fake Nigerian person with Yoruba background."
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.
Naija Faker MCP Server
MCP server for @codegrenade/naija-faker. Let's AI assistant generates fake typical Nigerian data ranging from name, address, phone number, LGAs and states for you. It supports Yoruba, Igbo, and Hausa ethnic groups with culturally authentic data.
NB: You can invoke the server in any AI assistant that supports MCP.
Quick Start
Add to your Claude Desktop config at:
macOS:
~/Library/Application Support/Claude/claude_desktop_config.jsonWindows:
%APPDATA%\Claude\claude_desktop_config.json
{
"mcpServers": {
"naija-faker-mcp": {
"command": "npx",
"args": ["-y", "@codegrenade/naija-faker-mcp@latest"]
}
}
}PS: You can also use the inspector to debug the server. See the development section for more information.
Related MCP server: Mono Banking MCP Server
Available tools
Tool | Description |
generate_person | Generate one basic composite person record with identity and contact fields: title, name, email, phone, and address. Use atomic tools for individual attributes. |
generate_address | Generate a fake Nigerian address. |
generate_phone_number | Generate a fake Nigerian phone number. |
generate_lgas | Generate fake Nigerian LGAs. |
generate_states | Generate fake Nigerian states. |
generate_email | Generate a fake Nigerian email. |
generate_nin | Generate a fake Nigerian NIN. |
generate_bvn | Generate a fake Nigerian BVN. |
generate_license_plate | Generate a fake Nigerian license plate. |
generate_people | Generate an array of basic composite person records. Defaults to 10 records. |
generate_title | Generate a fake Nigerian title. |
generate_name | Generate a fake Nigerian name. |
generate_vehicle_record | Generate a fake Nigerian vehicle record. |
generate_company | Generate a fake Nigerian company. |
generate_university | Generate a fake Nigerian university |
generate_education_record | Generate a fake Nigerian education record |
generate_work_record | Generate a fake Nigerian work record |
generate_detailed_person | Generate one detailed composite record containing a consistent person plus date of birth, marital, health, financial, kin, education, work, and vehicle fields. |
generate_detailed_people | Generate an array of detailed composite person records. Defaults to 1 record. |
generate_date_of_birth | Generate a fake date of birth |
generate_marital_status | Generate a fake marital status |
generate_blood_group | Generate a fake blood group |
generate_genotype | Generate a fake genotype |
generate_salary | Generate a fake salary |
generate_next_of_kin | Generate a fake Nigerian next of kin |
generate_bank_account | Generate a fake Nigerian bank account |
generate_consistent_person | Generate one basic composite person record plus geographically coherent state and LGA fields. |
generate_consistent_people | Generate an array of geographically consistent composite person records. Defaults to 10 records. |
Development
Clone Repository
git clone https://github.com/kodegrenade/naija-faker-mcp.gitNavigate to the project directory
cd naija-faker-mcpInstall dependencies
npm installRun the server
npm run devDebug with inspector
npx @modelcontextprotocol/inspector npm run devLicense
MIT
Available Tools
28 toolsgenerate_addressGenerate a fake addressARead-only
Generates a synthetic Nigerian address.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
Output Schema
| Name | Required | Description |
|---|---|---|
| value | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true and destructiveHint=false, and the description does not contradict them. It adds the detail that the output is synthetic, but it does not disclose further behavioral traits such as randomness or format variance; the output schema covers return-value shape.
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 sentence saying 'Generates a synthetic Nigerian address' is concise, front-loaded, and contains no filler. Every word adds information beyond the title.
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 parameterless generator with full annotation coverage and an output schema, this description is sufficient. An agent knows what to invoke it for and can rely on the output schema for return shape.
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 zero parameters and 100% description coverage, so there are no parameters whose semantics need explanation. The baseline of 4 applies, and the description offers the useful country constraint even though no parameter controls it.
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?
States the verb 'generates' and a specific resource: a synthetic Nigerian address. This clearly identifies what the tool does and distinguishes it from sibling tools that generate persons, bank accounts, or vehicle records.
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 is for producing a fake Nigerian address when such data is needed, but it gives no explicit when-to-use guidance or alternatives. With zero parameters and a self-explanatory purpose, this implied usage is acceptable but not explicit.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
generate_bank_accountGenerate a bank accountARead-only
Generates a synthetic bank account for test data.
| Name | Required | Description | Default |
|---|---|---|---|
| bankName | No |
Output Schema
| Name | Required | Description |
|---|---|---|
| value | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true and destructiveHint=false, covering the safety profile. The description usefully adds that the bank account is synthetic and intended for test data, but it does not add deeper behavioral context such as randomness, determinism, or output characteristics.
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 with no filler, front-loading the action and the resource. 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 simple tool with no required parameters, a read-only annotation, and an output schema, the core invocation is adequately covered. However, the optional 'bankName' parameter is undocumented and the description provides no sibling-selection guidance, leaving minor but real 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?
Schema description coverage is 0%, so the description must compensate by explaining the 'bankName' parameter, but it never mentions it. The parameter name is somewhat self-explanatory, yet optionality, expected format, and behavior when omitted are left to inference.
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 names a specific verb ('Generates'), a concrete resource ('a synthetic bank account'), and the intended context ('for test data'). This clearly differentiates it from sibling generators such as generate_person, generate_vehicle_record, and generate_company.
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 phrase 'for test data' implies when the tool is appropriate, but there is no explicit guidance about when not to use it or which sibling alternative to choose. With 27 sibling generators, the agent must largely infer selection from the tool name.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
generate_blood_groupGenerate blood groupARead-only
Generates a synthetic blood group.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
Output Schema
| Name | Required | Description |
|---|---|---|
| value | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The annotations already declare readOnlyHint=true and destructiveHint=false, covering safety. The description adds the meaningful context that the result is synthetic, which is important for agents to understand they are not getting real-world data.
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, concise sentence that immediately communicates the tool's function. It contains no filler or redundant wording.
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 parameterless, read-only synthetic generator with an output schema and safety annotations, the description is complete. Nothing else is required for an agent to select and invoke the tool correctly.
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 burden for the description to carry. A baseline of 4 is appropriate because no additional parameter explanation is needed.
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 verb ('generates') and the resource ('synthetic blood group'), so an agent knows exactly what this tool produces. It is distinct from sibling generators by naming a unique resource, though it does not explicitly call out how it differs from similar generator tools.
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?
There is no guidance about when to use this tool versus alternatives such as generate_person or generate_genotype. The tool is a simple generator, but the description does not mention context, prerequisites, or exclusions.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
generate_bvnGenerate a fake BVNARead-only
Generates a synthetic BVN for test data only.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
Output Schema
| Name | Required | Description |
|---|---|---|
| value | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already cover read-only and non-destructive behavior. The description adds meaningful behavioral context by stating the output is synthetic and intended for test data only, ruling out any expectation of a real BVN lookup.
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 key facts without redundancy. Every word adds value.
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 parameterless generator with an output schema already present, the description is fully sufficient. It tells the agent what is generated and the allowed use, and no invocation details are missing.
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?
There are zero parameters and schema coverage is 100%, so the description does not need to explain any parameter details. The baseline of 4 applies because there is nothing missing for an agent to invoke the tool.
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 names the exact action ('generates'), the specific artifact ('synthetic BVN'), and the scope ('test data only'). This clearly separates it from sibling generators such as generate_nin or generate_person.
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?
'For test data only' is an explicit usage context that tells an agent when this generator is appropriate. It does not explicitly enumerate sibling alternatives or when-not-to-use cases, but the boundary is clear enough for a parameterless generator.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
generate_companyGenerate a companyARead-only
Generates a synthetic Nigerian company record.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
Output Schema
| Name | Required | Description |
|---|---|---|
| value | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true, openWorldHint=false, and destructiveHint=false, covering the safety profile. The description adds the critical 'synthetic' qualifier (indicating fake data) and the geographical scope 'Nigerian', which are not in the annotations. This aligns with the annotations and adds valuable context about the nature of the output.
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 fully front-loaded with the action and the output type. There is no filler or redundancy; 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?
Given the simplicity (0 parameters), the existence of an output schema (which documents the return structure), and annotations covering safety, the description is complete for an agent to understand what the tool does and when to invoke it. No additional behavioral or contextual details are 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 tool has zero parameters, so the description has no obligation to explain them. The baseline for 0 params is 4, and since the description doesn't attempt to add parameter details (which would be unnecessary), it meets the baseline appropriately.
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 'Generates a synthetic Nigerian company record' uses a specific verb (generates) and resource (company record), and includes the qualifier 'Nigerian' which distinguishes it from other generators. Among siblings like generate_person, generate_vehicle_record, etc., it clearly identifies the unique output type.
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: this tool generates a synthetic Nigerian company record. While it doesn't explicitly state when not to use it or name alternatives, the purpose is unambiguous and the sibling list makes the domain obvious. There is no misleading information, so it meets the 'clear context, no exclusions' criterion.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
generate_consistent_peopleGenerate geographically consistent peopleARead-only
Generates an array of synthetic people with geographically coherent identity, address, state, and LGA fields. Accepts an optional positive count and returns 10 records by default.
| Name | Required | Description | Default |
|---|---|---|---|
| count | No | The number of people to generate | |
| gender | No | The person's gender | |
| language | No | The person's language |
Output Schema
| Name | Required | Description |
|---|---|---|
| items | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The annotations already declare readOnlyHint=true and destructiveHint=false, so the description correctly adds behavioral context beyond that by noting the array nature, the optional positive count, and the default of 10 records. This is useful for an agent deciding whether to pass count or rely on the default.
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 tight sentences. The primary behavior and scope are front-loaded, the default-count behavior is included, and there is no redundant repetition of schema or annotation 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 output schema exists and annotations cover safety, the description is mostly complete for correctly invoking the tool. The only notable gap is that 'geographically coherent' is not elaborated enough to tell an agent exactly how fields are constrained across states, LGAs, and identity, but this does not block basic 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 input schema has 100% coverage of all three parameters, so the baseline is 3. The description adds value by stating that count is optional and that omitting it yields 10 records by default, which is not present in the schema. It does not discuss gender or language, but the schema already describes those fully.
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 states a specific verb and resource: 'Generates an array of synthetic people' with 'geographically coherent identity, address, state, and LGA fields.' This clearly distinguishes it from other people generators, especially the singular generate_consistent_person, by explicitly saying it returns an array.
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 phrase 'geographically consistent' implies the intended use, but the description does not explicitly state when to choose this tool over generate_people, generate_consistent_person, or generate_detailed_people. There are no exclusions or alternative routing, so usage guidance is only implied.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
generate_consistent_personGenerate a geographically consistent personARead-only
Generates one synthetic person whose identity, address, state, and LGA are geographically coherent. Accepts optional language and gender.
| Name | Required | Description | Default |
|---|---|---|---|
| gender | No | The person's gender | |
| language | No | The person's language |
Output Schema
| Name | Required | Description |
|---|---|---|
| lga | Yes | |
| Yes | ||
| phone | Yes | |
| state | Yes | |
| title | Yes | |
| address | Yes | |
| fullName | Yes | |
| lastName | Yes | |
| firstName | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already mark readOnlyHint=true and destructiveHint=false. The description adds that the generated person's identity, address, state, and LGA are mutually coherent, and that language and gender are optional. No contradiction 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?
Two short sentences with the main purpose front-loaded and no filler. 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 generator with only two optional enum parameters, an output schema, and safety annotations, the description is complete enough for an agent to understand and invoke it correctly.
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% and both parameters have enums and descriptions. The description only repeats that language and gender are optional, which is already visible from required:0. It adds no extra meaning about how these params affect coherence.
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?
States a specific verb ('Generates'), a single synthetic person, and the key property: identity, address, state, and LGA are geographically coherent. This clearly differentiates it from generic generate_person and from the plural generate_consistent_people.
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 use when geographic coherence matters, but it does not explicitly name alternatives or state when not to use this tool. With many sibling generation tools, explicit routing would be stronger.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
generate_date_of_birthGenerate a date of birthBRead-only
Generates a synthetic date of birth and age.
| Name | Required | Description | Default |
|---|---|---|---|
| maxAge | No | ||
| minAge | No |
Output Schema
| Name | Required | Description |
|---|---|---|
| value | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true and destructiveHint=false, so the safety profile is covered. The description adds minimal behavioral context: 'synthetic' indicates non-real data, and 'and age' shows that age is also generated. It does not explain randomness, how age is calculated relative to the current date, or how min/max age constraints affect the result.
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 one short, front-loaded sentence with every word earning its place. It avoids repeating the schema or annotations and wastes no space. This is an appropriate size for a tool with only two optional parameters and an output schema.
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?
The tool is simple, and the output schema plus annotations cover return structure and safety, so the description need not explain those. However, with zero schema descriptions and no usage guidance, the semantics of minAge/maxAge and the decision among sibling tools remain unresolved. It is minimally usable but not 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 0%, so the description bears the burden of explaining minAge and maxAge, but it does not mention them at all. An agent must infer from property names that these parameters bound the generated age. No defaults, inclusiveness, or behavior for invalid combinations are provided.
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 ('Generates') and names a concrete resource ('synthetic date of birth and age'), which clearly distinguishes it from sibling tools like generate_name or generate_phone_number. It is not a pure tautology because it adds 'synthetic' and the fact that age is also produced. It does not, however, clarify how it relates to generate_person, which might also produce a date of birth.
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?
There is no guidance about when to use this tool versus the many sibling tools. It does not mention alternatives such as generate_person or generate_detailed_person for full profiles, nor does it state when a standalone date of birth is appropriate. The agent is left to infer selection from the tool name alone.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
generate_detailed_peopleGenerate detailed peopleARead-only
Generates an array of synthetic detailed people. Each record includes geographically consistent identity data plus health, financial, kin, education, work, and vehicle records. Returns one record by default.
| Name | Required | Description | Default |
|---|---|---|---|
| count | No | The number of people to generate | |
| gender | No | The person's gender | |
| language | No | The person's language |
Output Schema
| Name | Required | Description |
|---|---|---|
| items | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already indicate readOnlyHint=true and destructiveHint=false, so safety is covered. The description adds value by stating 'Returns one record by default' and specifying the geographic consistency and comprehensive record composition, which clarifies behavior beyond the schema. This is strong disclosure given the annotation coverage.
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 sentences with no redundant content. It front-loads the primary purpose and key detail (array, detailed), then adds default behavior and data breadth. Every sentence earns its place—efficient and well-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 the tool has a rich output schema (not shown but indicated as present), the description doesn't need to enumerate return fields. It clearly explains the tool's scope, default behavior, and data categories, which is sufficient for agents to select and invoke it correctly. The complexity is high but well-covered by description plus annotations.
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 100%, so each parameter (count, gender, language) is already documented with types and descriptions. The description adds little beyond the schema—it doesn't explain how gender/language affect the records or what default values are used. At 100% coverage, baseline 3 is appropriate.
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 generates synthetic detailed people, specifying the resource ('array of synthetic detailed people') and the breadth of data included (identity plus health, financial, etc.). It distinguishes from generic people generators by emphasizing 'detailed' and listing covered domains, though it doesn't explicitly name a sibling like generate_detailed_person or generate_people, so it's clear but not fully distinguishing.
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 usage for generating bulk detailed records, but does not explicitly state when to prefer this over siblings like generate_detailed_person (single) or generate_consistent_people (consistency-specific). No exclusions or alternatives are mentioned, so context is only partially implied.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
generate_detailed_personGenerate a detailed personARead-only
Generates one synthetic detailed person, including geographically consistent identity data plus health, financial, kin, education, work, and vehicle records. Accepts optional language and gender.
| Name | Required | Description | Default |
|---|---|---|---|
| gender | No | The person's gender | |
| language | No | The person's language |
Output Schema
| Name | Required | Description |
|---|---|---|
| lga | Yes | |
| work | Yes | |
| Yes | ||
| phone | Yes | |
| state | Yes | |
| title | Yes | |
| salary | Yes | |
| address | Yes | |
| vehicle | Yes | |
| fullName | Yes | |
| genotype | Yes | |
| lastName | Yes | |
| education | Yes | |
| firstName | Yes | |
| nextOfKin | Yes | |
| bloodGroup | Yes | |
| dateOfBirth | Yes | |
| maritalStatus | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already signal a read-only, non-destructive operation, and the description adds value by revealing that generated data is geographically consistent and spans multiple domains. It also clarifies the tool produces exactly one person, not a batch. No contradiction with annotations is present.
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, dense sentence front-loads the core action ('Generates one synthetic detailed person') and then efficiently lists the included record categories and optional parameters. There is no filler or redundant 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?
Given the output schema exists, annotations cover safety, and both parameters are fully documented in the schema, the description is largely sufficient. It conveys the singular output, breadth of included data, and geographic consistency, leaving only the sibling-selection guidance less explicit.
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 100%, with both optional parameters already described and constrained by enums. The description only restates that language and gender are optional, adding no meaning beyond what the input schema already provides.
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 ('Generates'), a clear resource ('one synthetic detailed person'), and a concrete scope ('health, financial, kin, education, work, and vehicle records'). The word 'detailed' and the record list help distinguish it from simpler siblings like generate_person, though it does not explicitly name differences from generate_consistent_person.
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 generating a comprehensive person profile with multiple bundled record types, which suggests when it would be preferred over a simpler generator. However, it never explicitly states when to use this tool instead of generate_person, generate_consistent_person, or generate_detailed_people, so the guidance remains inferential.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
generate_education_recordGenerate an education recordBRead-only
Generates a synthetic education record.
| Name | Required | Description | Default |
|---|---|---|---|
| language | No |
Output Schema
| Name | Required | Description |
|---|---|---|
| value | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true and destructiveHint=false, covering the safety profile. The description adds 'synthetic,' indicating the data is fabricated rather than real, which is useful. It doesn't disclose behavior like randomness or standalone output, but annotations lower the burden.
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 one short, direct sentence with no wasted words. It states the action and the synthetic nature of the output efficiently, though it could have included more useful context without becoming verbose.
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?
The tool is simple, has an output schema, and annotations cover side effects. However, the description gives no guidance on what an education record includes or when to select this among many sibling generators, leaving some ambiguity.
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%, and the description does not mention the optional 'language' parameter at all. The schema's enum is clear on its own, but the description was supposed to compensate for low coverage and does not.
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 states a clear verb and resource: it generates a synthetic education record. The word 'synthetic' usefully signals fabricated data. It doesn't explicitly distinguish from sibling generators like generate_work_record, but the resource is specific 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?
There is no guidance about when to use this tool versus sibling generators such as generate_work_record, generate_university, or generate_detailed_person. The context signal listing many similar sibling tools makes this omission noticeable.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
generate_emailGenerate a fake emailBRead-only
Generates a synthetic email address.
| Name | Required | Description | Default |
|---|---|---|---|
| name | No |
Output Schema
| Name | Required | Description |
|---|---|---|
| value | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true and destructiveHint=false, covering safety. The description adds the word 'synthetic' but provides no additional behavioral details (e.g., randomness, format, or how it interacts with the name parameter). It is consistent with annotations but adds minimal context.
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, direct sentence with no filler. It front-loads the purpose and wastes no words, achieving ideal conciseness for a simple tool.
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's low complexity and the presence of an output schema, the description is mostly sufficient for calling the tool, but the missing parameter semantics and lack of usage context leave it incomplete. It is adequate for a trivial generator but not fully self-contained.
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 explain the optional 'name' parameter, but it does not mention it at all. An agent cannot know what the name does or how to use it, leaving a critical gap for a parameter that could affect generation.
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 states a specific verb ('generates') and resource ('synthetic email address'), clearly distinguishing it from siblings like generate_person or generate_name. The title reinforces this, and the wording is not a tautology.
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 given about when to use this tool vs alternatives. The description does not mention any criteria, conditions, or exclusions, nor does it reference sibling tools. The agent is left to infer usage solely from the name, which is insufficient.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
generate_genotypeGenerate genotypeARead-only
Generates a synthetic genotype.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
Output Schema
| Name | Required | Description |
|---|---|---|
| value | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The description adds 'synthetic', which clarifies that the output is simulated and not real, a useful behavior beyond the annotations' read-only/non-destructive hints. However, it doesn't describe what calling the tool implies (e.g., no side effects, deterministic vs random), though the lack of parameters and presence of output schema reduce the gap.
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 with no wasted words. It front-loads the action and object, and there is no filler or redundancy. Exactly as concise as needed for a parameterless generator.
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 tool with no parameters and an output schema, the description is largely sufficient. The agent knows it generates a synthetic genotype and can rely on the output schema for return structure. The only gap is usage context among siblings, but that is already penalized in usage_guidelines.
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 description has no parameter semantics to add. According to the rubric, a zero-parameter tool gets a baseline of 4, and the description is consistent with that. It doesn't interfere with the empty schema.
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 states a clear verb 'Generates' and a specific resource 'synthetic genotype', so an agent can tell it produces a genotype. It does not explicitly differentiate from siblings, but the resource name is unique among the generate_* tools, so it's identifiable without deeper schema inspection.
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 given on when to use this tool versus any sibling. With 27 generate_* siblings, an agent gets no hints about selecting this over alternatives like generate_person or generate_blood_group. No exclusions or conditions are provided.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
generate_lgasGenerate Nigerian LGAsARead-only
Returns the available Nigerian LGAs.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
Output Schema
| Name | Required | Description |
|---|---|---|
| value | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare read-only and non-destructive behavior, lowering the burden. The description adds that the tool returns the available LGAs rather than generating a random one, but it does not explain list shape, ordering, or relationship to states. With strong annotations, this is adequate but not rich.
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?
One short sentence wastes no words and front-loads the core message. It is appropriately sized for a zero-parameter read-only lookup.
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 tool with an output schema and read-only annotations, the description is complete: an agent knows the operation is a safe list lookup. Nothing else is needed to invoke it correctly.
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?
There are zero parameters, so the semantics are vacuous and the description need not elaborate. The baseline for a no-parameter tool is 4.
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 states a specific verb ('Returns') and resource ('available Nigerian LGAs'), making the core function clear. It distinguishes the resource from sibling generators like generate_states and generate_address, though it does not explicitly contrast 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?
No usage guidance is given: the description does not say when to choose this tool versus generate_states or generate_address, nor does it mention prerequisites or exclusions. The agent must infer from the name that this is the LGA-listing tool.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
generate_license_plateGenerate a license plateCRead-only
Generates a synthetic Nigerian license plate.
| Name | Required | Description | Default |
|---|---|---|---|
| state | No |
Output Schema
| Name | Required | Description |
|---|---|---|
| value | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already establish readOnly and non-destructive behavior. The description adds the useful context that the output is synthetic and Nigerian-specific, but it does not disclose plate format, randomness, or any generation constraints beyond that.
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 compact sentence that is front-loaded and contains no filler. Every word contributes to the meaning 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?
The output schema and annotations cover some context, but the description leaves the state parameter entirely unexplained, including whether it is a Nigerian state name, abbreviation, or something else. This gap prevents an agent from confidently invoking the tool with a correct state value.
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 includes a single 'state' parameter with 0% description coverage, and the tool description does not mention state at all. There is no guidance on allowed values, default behavior, or how state affects the generated plate, so the description adds no parameter meaning.
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 states a specific verb ('Generates'), a concrete resource ('Nigerian license plate'), and the synthetic nature of the data. It is clear, though it does not explicitly differentiate itself from related sibling generators such as generate_vehicle_record.
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 no guidance about when to choose this tool over alternatives like generate_vehicle_record or other data generators. Intended usage is only implied by the tool name and resource, not explicitly stated.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
generate_marital_statusGenerate marital statusARead-only
Generates a synthetic marital status.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
Output Schema
| Name | Required | Description |
|---|---|---|
| value | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The description adds the useful qualifier 'synthetic', and annotations already indicate read-only, non-destructive, closed-world behavior. It does not describe randomness or independence from other generated attributes, but for a stateless zero-parameter generator this is a minor omission.
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 with no filler. For a trivial no-parameter generator, this length is appropriate and every word contributes to the meaning.
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 zero-parameter signature, read-only annotations, and output schema, the description is largely sufficient for an agent to invoke the tool correctly. It could mention available marital-status values, but the structured metadata fills most 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?
The tool has zero parametersaine and the schema confirms this with 100% coverage. The description correctly implies no inputs are needed, which satisfies the baseline for a parameterless tool.
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 that the tool 'generates' a 'synthetic marital status', giving a specific verb and resource. It does not explicitly distinguish itself from sibling generators like generate_person that may produce marital status as part of a larger entity, but the core purpose is unmistakable.
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?
There is no guidance on when to use this tool versus alternatives such as generate_person or generate_consistent_person, nor is there clarification that this produces a single field rather than a full record. Usage context is only implied by the tool name.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
generate_nameGenerate a fake nameBRead-only
Generates a synthetic Nigerian name.
| Name | Required | Description | Default |
|---|---|---|---|
| gender | No | ||
| language | No |
Output Schema
| Name | Required | Description |
|---|---|---|
| value | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true and destructiveHint=false, so the safety profile is known. The description adds 'synthetic', indicating the name is fake, but it does not disclose whether the generated name is random, independent across calls, or consistent—an important distinction given the generate_consistent_person siblings.
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 with no fluff, front-loading the verb. It is appropriately short, though it is concise to the point of under-specification because it omits behavioral and parameter 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?
Given the large sibling family including generate_person, generate_consistent_person, and generate_title, the description is not complete enough for an agent to reliably choose this tool. The output schema may cover return shape, but the description does not provide the behavioral or routing context needed to fully disambiguate it.
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%, and the description never mentions the gender or language parameters. The 'Nigerian' qualifier hints that the language enum values correspond to Nigerian languages, but the agent must infer all parameter meaning from the enum labels alone. No defaults, optionality, or combination behavior are described.
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, 'Generates', and a specific resource, 'synthetic Nigerian name', which clearly distinguishes it from sibling tools like generate_person, generate_people, and generate_title. The 'Nigerian' qualifier narrows the scope further and makes the tool's purpose immediately recognizable.
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?
There is no guidance on when to use this tool versus alternatives such as generate_person, generate_consistent_person, or generate_title. The description does not state whether this is appropriate for standalone random names, consistent names, or full person objects, leaving the agent to guess.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
generate_next_of_kinGenerate next of kinBRead-only
Generates a synthetic next-of-kin record.
| Name | Required | Description | Default |
|---|---|---|---|
| gender | No | ||
| language | No |
Output Schema
| Name | Required | Description |
|---|---|---|
| value | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The annotations supply readOnlyHint=true and destructiveHint=false, and the word 'synthetic' adds the important context that the data is fabricated and not real. The description does not elaborate on randomness, optional-parameter effects, or any generation constraints, but for a safe read-only generator 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 front-loaded sentence that wastes no words. It is concise while still containing the key 'synthetic' qualifier.
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 generator with zero required parameters and an output schema, the description is minimally sufficient to invoke the tool. However, it lacks any guidance on parameter effect or when to choose it over sibling generators, so it is not 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 0%, and the description says nothing about how gender or language affect the generated next-of-kin record. The parameter names and enum values are self-explanatory, but the description fails to compensate for the schema's lack of descriptions.
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 states a specific action ('Generates') and a distinct resource ('synthetic next-of-kin record'), so an agent can tell this apart from the many person/name generators. It is clear, though it does not explicitly contrast it with siblings such as generate_person or generate_detailed_person.
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?
There is no when-to-use guidance, no mention of alternatives, and no conditions for choosing this tool over related generators. An agent gets no help deciding between this and generate_person/consistent_person options.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
generate_ninGenerate a fake NINARead-only
Generates a synthetic NIN for test data only.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
Output Schema
| Name | Required | Description |
|---|---|---|
| value | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true and destructiveHint=false, covering the safety profile. The description adds 'synthetic' and 'test data only' but does not describe output characteristics or generation behavior beyond that; the output schema handles return details.
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 sentence with no filler, front-loading the action and resource and ending with the test-data constraint. 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 zero-parameter generator with annotations and an output schema, the description provides the necessary purpose and usage constraint. No material information an agent needs to invoke this tool correctly is missing.
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 nothing for the description to add about parameter meanings. The zero-parameter baseline of 4 applies.
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 states a specific verb ('generates') and resource ('a synthetic NIN'), and scopes it clearly to test data. This makes the tool's purpose unambiguous and distinct from the many other generate_* siblings.
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?
'For test data only' provides clear context and an implicit exclusion of production use. It does not name alternatives or explicit when-not conditions, but the tool is a standalone generator with no obvious competing sibling.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
generate_peopleGenerate fake peopleARead-only
Generates an array of basic composite synthetic person records. Accepts an optional positive count and returns 10 records by default.
| Name | Required | Description | Default |
|---|---|---|---|
| count | No | The number of people to generate |
Output Schema
| Name | Required | Description |
|---|---|---|
| items | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint and destructiveHint, so the description only needs to add behavioral context. It adds useful details: the result is an array, records are basic and composite/synthetic, count is optional, and 10 is the default. This goes beyond the annotation baseline without contradicting it.
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, tightly written sentence that front-loads the core behavior and then adds the key default behavior. 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 a single optional parameter, clear annotations, and an output schema present, the description covers the essential calling contract: optional count and default output size. It could name sibling alternatives, but that is more a usage-guidance gap than a completeness gap.
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 documents count as an integer with a minimum of 1, and schema coverage is 100%. The description adds meaning by stating the count is optional and that the default is 10 records, which the schema does not convey.
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?
States a clear verb and resource: it generates an array of synthetic person records. The words 'array' and 'basic composite' implicitly distinguish it from singular, detailed, and consistent person generators, though it does not name a sibling explicitly.
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 use when multiple basic synthetic person records are needed, and the default count of 10 hints at batch generation. However, it gives no explicit guidance about when to choose this over generate_person, generate_consistent_people, or generate_detailed_people.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
generate_personGenerate a fake personARead-only
Generates one basic composite person record with identity and contact fields. Use atomic tools when you need only one attribute. Accepts optional language (hausa, igbo, or yoruba) and gender (male or female). Returns one synthetic object.
| Name | Required | Description | Default |
|---|---|---|---|
| gender | No | The person's gender | |
| language | No | The person's language |
Output Schema
| Name | Required | Description |
|---|---|---|
| Yes | ||
| phone | Yes | |
| title | Yes | |
| address | Yes | |
| fullName | Yes | |
| lastName | Yes | |
| firstName | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true and destructiveHint=false, covering safety. The description adds that it returns 'one synthetic object' and is a 'composite' record, but doesn't disclose edge cases or any additional behavioral nuances. It adds modest context beyond the annotations, hence a 3.
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 with zero fluff; the core function and the key usage caveat are front-loaded. Every clause adds value, and the structure is 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?
The tool has an output schema (not shown but indicated), so return structure is covered elsewhere. The description covers the purpose, parameters, and usage distinction sufficiently for a basic composite generator. Minor gap: it doesn't hint at the specific identity/contact fields returned, but the output schema fills that.
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% and both parameters have enums and descriptions. The description repeats the parameter options ('language (hausa, igbo, or yoruba) and gender (male or female)') without adding new meaning beyond the schema, so the baseline of 3 applies.
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 states a clear verb ('generates') and resource ('one basic composite person record with identity and contact fields'), and explicitly contrasts with atomic tools, distinguishing it from siblings like generate_name or generate_email. It also implies a scope difference from detailed_person via 'basic composite'.
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 guidance: 'Use atomic tools when you need only one attribute,' which routes the agent away from composite generation. However, it does not explicitly address when to choose this over generate_people or generate_detailed_person, leaving some ambiguity among composite siblings.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
generate_phone_numberGenerate a fake phone numberBRead-only
Generates a synthetic Nigerian phone number.
| Name | Required | Description | Default |
|---|---|---|---|
| network | No |
Output Schema
| Name | Required | Description |
|---|---|---|
| value | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true and destructiveHint=false, so the safety profile is covered. The description adds the detail that the number is 'Nigerian' and 'synthetic', which is useful context beyond annotations. However, it does not disclose any other behavioral aspects such as randomness, determinism, or output format, but with annotations covering safety, the description adds some value.
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 with no fluff. It front-loads the core purpose and is appropriately sized for a tool with a single optional parameter. 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?
Given the tool's simplicity and that annotations and an output schema exist, the description is still incomplete. It omits usage guidance and the network parameter semantics, which are critical for correct invocation. An agent cannot fully determine when and how to use this tool based on the description alone.
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 description coverage is 0%, so the description must compensate for explaining the 'network' parameter. It does not mention the parameter at all, leaving the agent to infer from the enum (mtn, glo, airtel, 9mobile) without knowing how it affects the output. The enum is somewhat self-explanatory, but the description fails to connect it to the tool's behavior.
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 states a specific verb ('generates') and a specific resource ('synthetic Nigerian phone number'). It clearly distinguishes from sibling tools that generate people, NINs, vehicle records, etc. However, it doesn't mention the optional network parameter, which is part of the tool's purpose, so it falls short of a 5.
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 no guidance on when to use this tool versus alternatives. There is no mention of scenarios (e.g., needing a phone number, or when to use generate_consistent_person for correlated data). No exclusions or comparisons are given.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
generate_salaryGenerate a salary recordBRead-only
Generates a synthetic salary record.
| Name | Required | Description | Default |
|---|---|---|---|
| level | No |
Output Schema
| Name | Required | Description |
|---|---|---|
| value | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already convey read-only, non-destructive behavior, and the description adds the useful fact that the record is synthetic. However, it says nothing about randomness, consistency, or dependencies, so it provides adequate but not rich behavioral context given 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?
One short sentence, front-loaded with the core action and object, with no wasted words. It is as concise as a description can be, though it sacrifices explanatory depth elsewhere.
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?
The tool is simple (one optional enum parameter) and has an output schema and annotations, so the description is close to sufficient. However, the lack of usage guidance and parameter semantics leaves gaps that an agent must resolve by inference, making this a minimum-viable description.
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% and the description never mentions the 'level' parameter or how it affects the generated salary. The enum values are self-explanatory, but the description adds no meaning beyond the schema and fails to compensate for the missing parameter documentation.
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?
Description uses a clear verb ('generates') and names the resource ('synthetic salary record'), so an agent knows what it produces. It does not explicitly differentiate from sibling generators like generate_work_record, which could also involve salary data, so it falls short of the top score.
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 when-to-use or when-not-to-use guidance is given; the description states only what the tool does. With many sibling generator tools available, there is no mention of alternatives or conditions, so an agent must infer selection from the name and schema.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
generate_statesGenerate Nigerian statesARead-only
Returns the available Nigerian states.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
Output Schema
| Name | Required | Description |
|---|---|---|
| value | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true and destructiveHint=false, so the safety profile is covered. The description adds that the tool returns a predefined list of Nigerian states, but it does not say whether the result is exhaustive, ordered, or stable across calls. Since the tool has no parameters and a simple read-only behavior, 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?
A single, front-loaded sentence that conveys the essential behavior with no filler. 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 parameterless, read-only tool with an output schema, the description is nearly complete: it says what is returned and the domain. It loses one point for not clarifying what 'available' means (e.g., all 36 states plus FCT) or whether the ordering/count is guaranteed, though these are minor given the output schema and lack of parameters.
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 accepts zero parameters, so the schema's empty properties object covers 100% of the parameter surface. The description need not add parameter details, and the baseline for a zero-parameter tool is 4.
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?
States a specific verb ('Returns') and a specific resource ('available Nigerian states'), making it easily distinguishable from siblings like generate_lgas or generate_person. Even though the title already conveys the topic, the description clarifies that the tool returns the full available set rather than generating a single random value.
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 on when to use this tool instead of sibling generators such as generate_lgas, generate_address, or generate_person. The context is clear, but there are no exclusions, prerequisites, or routing hints.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
generate_titleGenerate a fake titleBRead-only
Generates a synthetic Nigerian title.
| Name | Required | Description | Default |
|---|---|---|---|
| gender | No |
Output Schema
| Name | Required | Description |
|---|---|---|
| value | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations declare readOnlyHint=true and destructiveHint=false, so the description doesn't need to repeat those. The description adds the Nigerian cultural context (which is helpful) but doesn't disclose output format or any conditional behavior (e.g., whether gender affects the title). With annotations covering the safety profile, the description adds minimal extra behavioral context.
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, concise and to the point. It provides the core purpose without any fluff, making it easy to parse.
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 only one optional parameter and an output schema (which likely defines the title format), the description is relatively complete for a simple generation tool. However, it could benefit from specifying the cultural scope (Nigerian) and how gender is used, but the output schema mitigates the need to explain return values.
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 one optional parameter 'gender' with enum values, and schema coverage is 0%. The description does not explain that 'gender' controls title variation (e.g., male vs. female titles). While the enum values are self-explanatory, the description fails to clarify how gender affects the generated title, leaving the agent to infer from common knowledge.
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 'Generates a synthetic Nigerian title' clearly states the verb (generates) and resource (Nigerian title), making the tool's purpose clear. It distinguishes from siblings like generate_name, which generates a full name, though it doesn't explicitly contrast with generate_name.
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 on when to use this tool versus alternatives like generate_name or generate_person. The description does not mention that generate_title might be used for title-only generation, nor does it note any constraints (e.g., gender-based). Context implies standalone title generation, but no explicit usage context or exclusions.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
generate_universityGenerate a universityARead-only
Generates a synthetic Nigerian university record.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
Output Schema
| Name | Required | Description |
|---|---|---|
| value | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true and destructiveHint=false, so the safety profile is covered. The description adds the important context that the record is synthetic and Nigerian-specified, which goes beyond annotations, but it does not disclose details like output structure or possible variability. This is adequate but not rich.
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 sentence that immediately states the tool's purpose with the key qualifying details ('synthetic', 'Nigerian', 'university record'). There is no wasted wording and the structure efficiently front-loads the action and object.
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 parameterless generation tool with an output schema available, this description is fully sufficient. An agent knows what to expect (a synthetic Nigerian university record) and can rely on the output schema for return structure. No additional 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?
There are zero parameters, so the schema provides full 100% coverage and there is nothing for the description to clarify. The baseline for no parameters is 4, and the description appropriately focuses on the output rather than any parameters.
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 ('Generates') and a specific resource ('synthetic Nigerian university record'), making the tool's function unmistakable. It is distinct from siblings like generate_person or generate_education_record by targeting a university entity, even though it does not explicitly name the differentiating sibling.
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 a synthetic Nigerian university record is needed, which is clear from the purpose. However, it provides no explicit guidance about when not to use it or how it differs from overlapping siblings such as generate_education_record or generate_company.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
generate_vehicle_recordGenerate a vehicle recordBRead-only
Generates a synthetic Nigerian vehicle record.
| Name | Required | Description | Default |
|---|---|---|---|
| state | No |
Output Schema
| Name | Required | Description |
|---|---|---|
| value | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true and destructiveHint=false, and the description adds the key behavioral fact that the record is synthetic and Nigerian. It does not go deeper into randomness, determinism, or state-dependent behavior, but for a simple generator with an output schema 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 front-loaded sentence with no filler or repeated title words. 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?
Given the tool's low complexity, an output schema, and safety annotations, the definition is mostly adequate. It is incomplete only in usage guidance and the meaning/effect of the optional state parameter, which prevent it from being fully self-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?
Schema description coverage is 0%, and the description never mentions the only parameter, state. The word 'Nigerian' hints at the domain but does not explain what values state accepts or how it affects the generated record, so the parameter semantics are not compensated outside the schema.
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 states a specific action ('Generates') and resource ('synthetic Nigerian vehicle record'), which is clear and distinct enough from sibling tools like generate_license_plate. It does not explicitly contrast itself with sibling generate_* tools, so it falls just short of a 5.
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 use case is implied: call this when a synthetic Nigerian vehicle record is needed. However, there is no explicit guidance about when to prefer this over sibling record generators (e.g., generate_education_record, generate_work_record) or what the optional state parameter is for.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
generate_work_recordGenerate a work recordARead-only
Generates a synthetic work record.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
Output Schema
| Name | Required | Description |
|---|---|---|
| value | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true and destructiveHint=false, so the tool's safety profile is covered. The description adds the 'synthetic' clarification, which is useful context, but it does not describe the output format, randomness behavior, or relation to other generated entities. With annotations present, 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, compact sentence with no filler. It front-loads the verb and resource, making the purpose immediately clear.
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 generator with an output schema and safety annotations, the description covers the essentials. It could be slightly more helpful by clarifying what a 'work record' contains or when to use this tool over nearby sibling generators, but the low complexity keeps the gap minor.
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 ambiguity to resolve. The description need not explain parameter meaning; the baseline for a zero-parameter tool is appropriate.
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 function: generating a synthetic work record. It is specific about verb ('generates') and resource ('work record'), though it does not explicitly differentiate it from sibling record generators like generate_education_record or generate_vehicle_record.
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 about when to use this tool versus any of the many sibling generators. The description only states what the tool does, with no mention of alternatives, prerequisites, or exclusions.
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.
29 tool updates
v2.0.0- Changed
generate_address1 field changed- changed
Output schema / (root)Previous value: -nullNew value: +{ + "$schema": "http://json-schema.org/draft-07/schema#", + "additionalProperties": false, + "properties": { + "value": {} + }, + "required": [ + "value" + ], + "type": "object" +}
- Added
generate_bank_account - Changed
generate_blood_group1 field changed- changed
Output schema / (root)Previous value: -nullNew value: +{ + "$schema": "http://json-schema.org/draft-07/schema#", + "additionalProperties": false, + "properties": { + "value": {} + }, + "required": [ + "value" + ], + "type": "object" +}
- Changed
generate_bvn1 field changed- changed
Output schema / (root)Previous value: -nullNew value: +{ + "$schema": "http://json-schema.org/draft-07/schema#", + "additionalProperties": false, + "properties": { + "value": {} + }, + "required": [ + "value" + ], + "type": "object" +}
- Changed
generate_company1 field changed- changed
Output schema / (root)Previous value: -nullNew value: +{ + "$schema": "http://json-schema.org/draft-07/schema#", + "additionalProperties": false, + "properties": { + "value": {} + }, + "required": [ + "value" + ], + "type": "object" +}
- Changed
generate_consistent_people8 fields changed- added
Input schema / properties / count / maximumAdded value: +9007199254740991 - added
Input schema / properties / count / minimumAdded value: +1 - changed
Input schema / properties / count / typePrevious value: -"number"New value: +"integer" - changed
Input schema / properties / gender / descriptionPrevious value: -"The gender of the person data. The accepted gender values are male and female"New value: +"The person's gender" - added
Input schema / properties / gender / enumAdded value: +[ + "male", + "female" +] - changed
Input schema / properties / language / descriptionPrevious value: -"The language of the person data. The available languages are Hausa, Igbo and Yoruba"New value: +"The person's language" - added
Input schema / properties / language / enumAdded value: +[ + "hausa", + "igbo", + "yoruba" +] - changed
Output schema / (root)Previous value: -nullNew value: +{ + "$schema": "http://json-schema.org/draft-07/schema#", + "additionalProperties": false, + "properties": { + "items": { + "items": { + "additionalProperties": false, + "properties": { + "address": { + "type": "string" + }, + "email": { + "type": "string" + }, + "firstName": { + "type": "string" + }, + "fullName": { + "type": "string" + }, + "lastName": { + "type": "string" + }, + "lga": { + "type": [ + "string", + "null" + ] + }, + "phone": { + "type": "string" + }, + "state": { + "type": "string" + }, + "title": { + "type": "string" + } + }, + "required": [ + "title", + "firstName", + "lastName", + "fullName", + "email", + "phone", + "address", + "state", + "lga" + ], + "type": "object" + }, + "type": "array" + } + }, + "required": [ + "items" + ], + "type": "object" +}
- Changed
generate_consistent_person5 fields changed- changed
Input schema / properties / gender / descriptionPrevious value: -"The gender of the person data. The accepted gender values are male and female"New value: +"The person's gender" - added
Input schema / properties / gender / enumAdded value: +[ + "male", + "female" +] - changed
Input schema / properties / language / descriptionPrevious value: -"The language of the person data. The available languages are Hausa, Igbo and Yoruba"New value: +"The person's language" - added
Input schema / properties / language / enumAdded value: +[ + "hausa", + "igbo", + "yoruba" +] - changed
Output schema / (root)Previous value: -nullNew value: +{ + "$schema": "http://json-schema.org/draft-07/schema#", + "additionalProperties": false, + "properties": { + "address": { + "type": "string" + }, + "email": { + "type": "string" + }, + "firstName": { + "type": "string" + }, + "fullName": { + "type": "string" + }, + "lastName": { + "type": "string" + }, + "lga": { + "type": [ + "string", + "null" + ] + }, + "phone": { + "type": "string" + }, + "state": { + "type": "string" + }, + "title": { + "type": "string" + } + }, + "required": [ + "title", + "firstName", + "lastName", + "fullName", + "email", + "phone", + "address", + "state", + "lga" + ], + "type": "object" +}
- Changed
generate_date_of_birth9 fields changed- removed
Input schema / properties / maxAge / descriptionRemoved value: -"The maximum age of the date of birth" - added
Input schema / properties / maxAge / maximumAdded value: +9007199254740991 - added
Input schema / properties / maxAge / minimumAdded value: +0 - changed
Input schema / properties / maxAge / typePrevious value: -"number"New value: +"integer" - removed
Input schema / properties / minAge / descriptionRemoved value: -"The minimum age of the date of birth" - added
Input schema / properties / minAge / maximumAdded value: +9007199254740991 - added
Input schema / properties / minAge / minimumAdded value: +0 - changed
Input schema / properties / minAge / typePrevious value: -"number"New value: +"integer" - changed
Output schema / (root)Previous value: -nullNew value: +{ + "$schema": "http://json-schema.org/draft-07/schema#", + "additionalProperties": false, + "properties": { + "value": {} + }, + "required": [ + "value" + ], + "type": "object" +}
- Changed
generate_detailed_people9 fields changed- changed
Input schema / properties / count / descriptionPrevious value: -"The number of detailed people to generate"New value: +"The number of people to generate" - added
Input schema / properties / count / maximumAdded value: +9007199254740991 - added
Input schema / properties / count / minimumAdded value: +1 - changed
Input schema / properties / count / typePrevious value: -"number"New value: +"integer" - changed
Input schema / properties / gender / descriptionPrevious value: -"The gender of the detailed people. The accepted gender values are male and female"New value: +"The person's gender" - added
Input schema / properties / gender / enumAdded value: +[ + "male", + "female" +] - changed
Input schema / properties / language / descriptionPrevious value: -"The language of the detailed people. The available languages are Hausa, Igbo and Yoruba"New value: +"The person's language" - added
Input schema / properties / language / enumAdded value: +[ + "hausa", + "igbo", + "yoruba" +] - changed
Output schema / (root)Previous value: -nullNew value: +{ + "$schema": "http://json-schema.org/draft-07/schema#", + "additionalProperties": false, + "properties": { + "items": { + "items": { + "additionalProperties": false, + "properties": { + "address": { + "type": "string" + }, + "bloodGroup": { + "type": "string" + }, + "dateOfBirth": { + "additionalProperties": false, + "properties": { + "age": { + "type": "number" + }, + "date": { + "type": "string" + } + }, + "required": [ + "date", + "age" + ], + "type": "object" + }, + "education": { + "additionalProperties": false, + "properties": { + "abbreviation": { + "type": "string" + }, + "course": { + "type": "string" + }, + "degree": { + "type": "string" + }, + "graduationYear": { + "type": "number" + }, + "university": { + "type": "string" + } + }, + "required": [ + "university", + "abbreviation", + "degree", + "course", + "graduationYear" + ], + "type": "object" + }, + "email": { + "type": "string" + }, + "firstName": { + "type": "string" + }, + "fullName": { + "type": "string" + }, + "genotype": { + "type": "string" + }, + "lastName": { + "type": "string" + }, + "lga": { + "type": [ + "string", + "null" + ] + }, + "maritalStatus": { + "type": "string" + }, + "nextOfKin": { + "additionalProperties": false, + "properties": { + "address": { + "type": "string" + }, + "fullName": { + "type": "string" + }, + "phone": { + "type": "string" + }, + "relationship": { + "type": "string" + } + }, + "required": [ + "fullName", + "relationship", + "phone", + "address" + ], + "type": "object" + }, + "phone": { + "type": "string" + }, + "salary": { + "additionalProperties": false, + "properties": { + "amount": { + "type": "number" + }, + "currency": { + "type": "string" + }, + "frequency": { + "type": "string" + }, + "level": { + "type": "string" + } + }, + "required": [ + "amount", + "currency", + "level", + "frequency" + ], + "type": "object" + }, + "state": { + "type": "string" + }, + "title": { + "type": "string" + }, + "vehicle": { + "additionalProperties": false, + "properties": { + "color": { + "type": "string" + }, + "licensePlate": { + "type": "string" + }, + "make": { + "type": "string" + }, + "model": { + "type": "string" + }, + "year": { + "type": "number" + } + }, + "required": [ + "licensePlate", + "make", + "model", + "year", + "color" + ], + "type": "object" + }, + "work": { + "additionalProperties": false, + "properties": { + "company": { + "type": "string" + }, + "industry": { + "type": "string" + }, + "position": { + "type": "string" + }, + "startYear": { + "type": "number" + } + }, + "required": [ + "company", + "position", + "industry", + "startYear" + ], + "type": "object" + } + }, + "required": [ + "title", + "firstName", + "lastName", + "fullName", + "email", + "phone", + "address", + "state", + "lga", + "dateOfBirth", + "maritalStatus", + "bloodGroup", + "genotype", + "salary", + "nextOfKin", + "education", + "work", + "vehicle" + ], + "type": "object" + }, + "type": "array" + } + }, + "required": [ + "items" + ], + "type": "object" +}
- Changed
generate_detailed_person5 fields changed- changed
Input schema / properties / gender / descriptionPrevious value: -"The gender of the detailed person. The accepted gender values are male and female"New value: +"The person's gender" - added
Input schema / properties / gender / enumAdded value: +[ + "male", + "female" +] - changed
Input schema / properties / language / descriptionPrevious value: -"The language of the detailed person. The available languages are Hausa, Igbo and Yoruba"New value: +"The person's language" - added
Input schema / properties / language / enumAdded value: +[ + "hausa", + "igbo", + "yoruba" +] - changed
Output schema / (root)Previous value: -nullNew value: +{ + "$schema": "http://json-schema.org/draft-07/schema#", + "additionalProperties": false, + "properties": { + "address": { + "type": "string" + }, + "bloodGroup": { + "type": "string" + }, + "dateOfBirth": { + "additionalProperties": false, + "properties": { + "age": { + "type": "number" + }, + "date": { + "type": "string" + } + }, + "required": [ + "date", + "age" + ], + "type": "object" + }, + "education": { + "additionalProperties": false, + "properties": { + "abbreviation": { + "type": "string" + }, + "course": { + "type": "string" + }, + "degree": { + "type": "string" + }, + "graduationYear": { + "type": "number" + }, + "university": { + "type": "string" + } + }, + "required": [ + "university", + "abbreviation", + "degree", + "course", + "graduationYear" + ], + "type": "object" + }, + "email": { + "type": "string" + }, + "firstName": { + "type": "string" + }, + "fullName": { + "type": "string" + }, + "genotype": { + "type": "string" + }, + "lastName": { + "type": "string" + }, + "lga": { + "type": [ + "string", + "null" + ] + }, + "maritalStatus": { + "type": "string" + }, + "nextOfKin": { + "additionalProperties": false, + "properties": { + "address": { + "type": "string" + }, + "fullName": { + "type": "string" + }, + "phone": { + "type": "string" + }, + "relationship": { + "type": "string" + } + }, + "required": [ + "fullName", + "relationship", + "phone", + "address" + ], + "type": "object" + }, + "phone": { + "type": "string" + }, + "salary": { + "additionalProperties": false, + "properties": { + "amount": { + "type": "number" + }, + "currency": { + "type": "string" + }, + "frequency": { + "type": "string" + }, + "level": { + "type": "string" + } + }, + "required": [ + "amount", + "currency", + "level", + "frequency" + ], + "type": "object" + }, + "state": { + "type": "string" + }, + "title": { + "type": "string" + }, + "vehicle": { + "additionalProperties": false, + "properties": { + "color": { + "type": "string" + }, + "licensePlate": { + "type": "string" + }, + "make": { + "type": "string" + }, + "model": { + "type": "string" + }, + "year": { + "type": "number" + } + }, + "required": [ + "licensePlate", + "make", + "model", + "year", + "color" + ], + "type": "object" + }, + "work": { + "additionalProperties": false, + "properties": { + "company": { + "type": "string" + }, + "industry": { + "type": "string" + }, + "position": { + "type": "string" + }, + "startYear": { + "type": "number" + } + }, + "required": [ + "company", + "position", + "industry", + "startYear" + ], + "type": "object" + } + }, + "required": [ + "title", + "firstName", + "lastName", + "fullName", + "email", + "phone", + "address", + "state", + "lga", + "dateOfBirth", + "maritalStatus", + "bloodGroup", + "genotype", + "salary", + "nextOfKin", + "education", + "work", + "vehicle" + ], + "type": "object" +}
- Changed
generate_education_record3 fields changed- removed
Input schema / properties / language / descriptionRemoved value: -"The language of the education record. The available languages are Hausa, Igbo and Yoruba" - added
Input schema / properties / language / enumAdded value: +[ + "hausa", + "igbo", + "yoruba" +] - changed
Output schema / (root)Previous value: -nullNew value: +{ + "$schema": "http://json-schema.org/draft-07/schema#", + "additionalProperties": false, + "properties": { + "value": {} + }, + "required": [ + "value" + ], + "type": "object" +}
- Changed
generate_email2 fields changed- removed
Input schema / properties / name / descriptionRemoved value: -"The name of the email data" - changed
Output schema / (root)Previous value: -nullNew value: +{ + "$schema": "http://json-schema.org/draft-07/schema#", + "additionalProperties": false, + "properties": { + "value": {} + }, + "required": [ + "value" + ], + "type": "object" +}
- Changed
generate_genotype1 field changed- changed
Output schema / (root)Previous value: -nullNew value: +{ + "$schema": "http://json-schema.org/draft-07/schema#", + "additionalProperties": false, + "properties": { + "value": {} + }, + "required": [ + "value" + ], + "type": "object" +}
- Changed
generate_lgas1 field changed- changed
Output schema / (root)Previous value: -nullNew value: +{ + "$schema": "http://json-schema.org/draft-07/schema#", + "additionalProperties": false, + "properties": { + "value": {} + }, + "required": [ + "value" + ], + "type": "object" +}
- Changed
generate_license_plate2 fields changed- removed
Input schema / properties / state / descriptionRemoved value: -"The state of the preferred license plate" - changed
Output schema / (root)Previous value: -nullNew value: +{ + "$schema": "http://json-schema.org/draft-07/schema#", + "additionalProperties": false, + "properties": { + "value": {} + }, + "required": [ + "value" + ], + "type": "object" +}
- Changed
generate_marital_status1 field changed- changed
Output schema / (root)Previous value: -nullNew value: +{ + "$schema": "http://json-schema.org/draft-07/schema#", + "additionalProperties": false, + "properties": { + "value": {} + }, + "required": [ + "value" + ], + "type": "object" +}
- Changed
generate_name5 fields changed- removed
Input schema / properties / gender / descriptionRemoved value: -"The gender of the name data. The accepted gender values are male and female" - added
Input schema / properties / gender / enumAdded value: +[ + "male", + "female" +] - removed
Input schema / properties / language / descriptionRemoved value: -"The language of the name data. The available languages are Hausa, Igbo and Yoruba" - added
Input schema / properties / language / enumAdded value: +[ + "hausa", + "igbo", + "yoruba" +] - changed
Output schema / (root)Previous value: -nullNew value: +{ + "$schema": "http://json-schema.org/draft-07/schema#", + "additionalProperties": false, + "properties": { + "value": {} + }, + "required": [ + "value" + ], + "type": "object" +}
- Changed
generate_next_of_kin5 fields changed- removed
Input schema / properties / gender / descriptionRemoved value: -"The gender of the next of kin. The accepted gender values are male and female" - added
Input schema / properties / gender / enumAdded value: +[ + "male", + "female" +] - removed
Input schema / properties / language / descriptionRemoved value: -"The language of the next of kin. The available languages are Hausa, Igbo and Yoruba" - added
Input schema / properties / language / enumAdded value: +[ + "hausa", + "igbo", + "yoruba" +] - changed
Output schema / (root)Previous value: -nullNew value: +{ + "$schema": "http://json-schema.org/draft-07/schema#", + "additionalProperties": false, + "properties": { + "value": {} + }, + "required": [ + "value" + ], + "type": "object" +}
- Changed
generate_nin1 field changed- changed
Output schema / (root)Previous value: -nullNew value: +{ + "$schema": "http://json-schema.org/draft-07/schema#", + "additionalProperties": false, + "properties": { + "value": {} + }, + "required": [ + "value" + ], + "type": "object" +}
- Changed
generate_people5 fields changed- changed
Input schema / properties / count / descriptionPrevious value: -"The number of persons to be generated as part of the people list"New value: +"The number of people to generate" - added
Input schema / properties / count / maximumAdded value: +9007199254740991 - added
Input schema / properties / count / minimumAdded value: +1 - changed
Input schema / properties / count / typePrevious value: -"number"New value: +"integer" - changed
Output schema / (root)Previous value: -nullNew value: +{ + "$schema": "http://json-schema.org/draft-07/schema#", + "additionalProperties": false, + "properties": { + "items": { + "items": { + "additionalProperties": false, + "properties": { + "address": { + "type": "string" + }, + "email": { + "type": "string" + }, + "firstName": { + "type": "string" + }, + "fullName": { + "type": "string" + }, + "lastName": { + "type": "string" + }, + "phone": { + "type": "string" + }, + "title": { + "type": "string" + } + }, + "required": [ + "title", + "firstName", + "lastName", + "fullName", + "email", + "phone", + "address" + ], + "type": "object" + }, + "type": "array" + } + }, + "required": [ + "items" + ], + "type": "object" +}
- Changed
generate_person5 fields changed- changed
Input schema / properties / gender / descriptionPrevious value: -"The gender of the person data. The accepted gender values are male and female"New value: +"The person's gender" - added
Input schema / properties / gender / enumAdded value: +[ + "male", + "female" +] - changed
Input schema / properties / language / descriptionPrevious value: -"The language of the person data. The available languages are Hausa, Igbo and Yoruba"New value: +"The person's language" - added
Input schema / properties / language / enumAdded value: +[ + "hausa", + "igbo", + "yoruba" +] - changed
Output schema / (root)Previous value: -nullNew value: +{ + "$schema": "http://json-schema.org/draft-07/schema#", + "additionalProperties": false, + "properties": { + "address": { + "type": "string" + }, + "email": { + "type": "string" + }, + "firstName": { + "type": "string" + }, + "fullName": { + "type": "string" + }, + "lastName": { + "type": "string" + }, + "phone": { + "type": "string" + }, + "title": { + "type": "string" + } + }, + "required": [ + "title", + "firstName", + "lastName", + "fullName", + "email", + "phone", + "address" + ], + "type": "object" +}
- Changed
generate_phone_number3 fields changed- removed
Input schema / properties / network / descriptionRemoved value: -"The network of the preferred telco. The available networks are MTN, Glo, Airtel and 9mobile" - added
Input schema / properties / network / enumAdded value: +[ + "mtn", + "glo", + "airtel", + "9mobile" +] - changed
Output schema / (root)Previous value: -nullNew value: +{ + "$schema": "http://json-schema.org/draft-07/schema#", + "additionalProperties": false, + "properties": { + "value": {} + }, + "required": [ + "value" + ], + "type": "object" +}
- Changed
generate_salary3 fields changed- removed
Input schema / properties / level / descriptionRemoved value: -"The level of the salary. The accepted level values are entry, mid, executive and senior" - added
Input schema / properties / level / enumAdded value: +[ + "entry", + "mid", + "executive", + "senior" +] - changed
Output schema / (root)Previous value: -nullNew value: +{ + "$schema": "http://json-schema.org/draft-07/schema#", + "additionalProperties": false, + "properties": { + "value": {} + }, + "required": [ + "value" + ], + "type": "object" +}
- Changed
generate_states1 field changed- changed
Output schema / (root)Previous value: -nullNew value: +{ + "$schema": "http://json-schema.org/draft-07/schema#", + "additionalProperties": false, + "properties": { + "value": {} + }, + "required": [ + "value" + ], + "type": "object" +}
- Changed
generate_title3 fields changed- removed
Input schema / properties / gender / descriptionRemoved value: -"The gender of the title data. The accepted gender values are male and female" - added
Input schema / properties / gender / enumAdded value: +[ + "male", + "female" +] - changed
Output schema / (root)Previous value: -nullNew value: +{ + "$schema": "http://json-schema.org/draft-07/schema#", + "additionalProperties": false, + "properties": { + "value": {} + }, + "required": [ + "value" + ], + "type": "object" +}
- Changed
generate_university1 field changed- changed
Output schema / (root)Previous value: -nullNew value: +{ + "$schema": "http://json-schema.org/draft-07/schema#", + "additionalProperties": false, + "properties": { + "value": {} + }, + "required": [ + "value" + ], + "type": "object" +}
- Changed
generate_vehicle_record2 fields changed- removed
Input schema / properties / state / descriptionRemoved value: -"The state of the preferred vehicle" - changed
Output schema / (root)Previous value: -nullNew value: +{ + "$schema": "http://json-schema.org/draft-07/schema#", + "additionalProperties": false, + "properties": { + "value": {} + }, + "required": [ + "value" + ], + "type": "object" +}
- Changed
generate_work_record1 field changed- changed
Output schema / (root)Previous value: -nullNew value: +{ + "$schema": "http://json-schema.org/draft-07/schema#", + "additionalProperties": false, + "properties": { + "value": {} + }, + "required": [ + "value" + ], + "type": "object" +}
- Removed
genereate_bank_account
28 tool updates
v1.0.1- First observed
generate_address - First observed
generate_blood_group - First observed
generate_bvn - First observed
generate_company - First observed
generate_consistent_people - First observed
generate_consistent_person - First observed
generate_date_of_birth - First observed
generate_detailed_people - First observed
generate_detailed_person - First observed
generate_education_record - First observed
generate_email - First observed
generate_genotype - First observed
generate_lgas - First observed
generate_license_plate - First observed
generate_marital_status - First observed
generate_name - First observed
generate_next_of_kin - First observed
generate_nin - First observed
generate_people - First observed
generate_person - First observed
generate_phone_number - First observed
generate_salary - First observed
generate_states - First observed
generate_title - First observed
generate_university - First observed
generate_vehicle_record - First observed
generate_work_record - First observed
genereate_bank_account
TDQS
Scored across 28 tools
Most tools target a distinct data attribute (e.g., name, BVN, bank account), but there are six person-generation variants (basic, consistent, detailed, and plural forms) that an agent could easily confuse. The descriptions clarify differences, so misselection is possible but not likely with careful reading.
All tools follow a consistent generate_* snake_case convention, making the set feel uniform. Minor deviations include generate_states and generate_lgas, which return static lists rather than generating synthetic data, and plural variants like generate_people.
28 tools is on the heavy side and exceeds the typical well-scoped range, but the broad domain of Nigerian synthetic data (identity, health, finance, education, vehicles, geography) justifies the count. The tools are not redundant; each focuses on a different data type.
The surface covers a wide range of Nigerian-specific data generation needs, including NIN, BVN, states/LGAs, vehicles, and detailed composite records. Minor gaps exist, such as passport numbers, voter IDs, or religion/ethnicity fields, but core test-data workflows are well supported.
Maintenance
Related MCP Connectors
Generate synthetic random user data for testing, demos, and development without using real persona.
Nigeria payments for AI agents — bank transfer / USSD via Paystack. Never holds funds.
Generate realistic, FK-consistent synthetic test data for your databases from your AI assistant.
Harness the power of names with our Name Demographics MCP. Using Agify, Genderize, and Nationalize
Related MCP Servers
- FlicenseNot gradedqualityDmaintenanceNigeria's AI infrastructure server that provides business automation agents including WhatsApp automation, university support, travel management, and legal document processing. Integrates payment processing, text-to-speech capabilities, and webhook handling for Nigerian businesses.-
- AlicenseNot gradedqualityDmaintenanceEnables AI assistants to perform Nigerian banking operations including account management, payments, and identity verification through the Mono Open Banking API.59MIT
- AlicenseAqualityCmaintenanceEnables AI assistants to generate realistic, synthetic test data on demand, including valid PESELs, NIPs, addresses, and more across 27 EU countries, through two tools: list_generators and generate.221 npmMIT
- AlicenseAqualityCmaintenanceEnables AI assistants to buy airtime and data, check wallet balance, list data plans, and view transactions for Nigerian mobile networks via an Azabill account.6146 npmMIT