Skip to main content
Glama
culstrup

Unanet GovCon ERP MCP Server

by culstrup

Unanet GovCon ERP MCP Server

Transform your 30-minute Unanet reports into 30-second conversations with AI

šŸŽÆ For GovCon Leaders Who Are Tired Of:

  • Clicking through 10 screens to answer one question

  • Waiting 20 minutes for reports that should take 20 seconds

  • Training new employees on complex ERP navigation

  • Missing critical project updates buried in data

Related MCP server: Kion MCP Server

šŸš€ What if you could just ask: "Give me an executive briefing on all projects"?

Executive Daily Briefing Example

ā±ļø Save 2-4 hours per week on ERP tasks:

  • Project Managers: Instant status updates, resource allocation checks, budget tracking

  • Executives: Daily briefings in seconds, not spreadsheets

  • Finance Teams: Real-time billing status, instant invoice generation

  • Everyone: No more clicking through 10 screens to find one answer

šŸ’” See It In Action

From Complex Navigation to Simple Questions

Before: Log in → Projects → Select Project → Export → Format in Excel → Write Summary (15-30 min)

After: "What's the status of all active projects?" (30 seconds)

Executive Status Query

šŸŽÆ Quick Start

For Windows Users: Download → Run setup-windows.bat → Done! Detailed Guide

For Technical Users: See Installation below

šŸŽÆ What You Can Do

Ask Claude natural questions about your Unanet data:

āœ… "Show me all projects over budget" āœ… "Submit 8 hours to Project Alpha for today" āœ… "Generate a compliance report for Q4" āœ… "Which team members are overallocated next month?" āœ… "Create an invoice for project DEF456"

No more memorizing menu paths or waiting for reports to load!

šŸ’° ROI & Time Savings

Based on real GovCon operations:

  • Project Managers: Save 2-4 hours per week

  • Executives: Save 1-2 hours daily on status updates

  • Finance Teams: Cut monthly billing reconciliation time by 75%

  • Everyone: Get answers in seconds, not minutes

Real Example: Executive Daily Briefing

Traditional Method: Run reports → Export data → Analyze → Format (20+ minutes) With Claude: "Give me an exec daily briefing" (30 seconds)

Executive Daily Briefing - Unanet Projects

• Portfolio Health: 2 active projects ($350K total budget) tracking on schedule
• Project Alpha: 50% complete with proportional budget burn - entering critical phase
• Project Beta: Early stage execution at 25% complete, healthy trajectory
• Resource Status: Team allocation stable, no conflicts identified
• Risk Assessment: All projects green status

Recommended Action: Schedule mid-project review for Alpha this week

Billing Status Integration

šŸ“ø See More Power User Examples

Features

Tools Available

Project Management

  • unanet_get_projects - List all projects with filtering options

  • unanet_get_project_details - Get detailed information about a specific project

  • unanet_update_project_budget - Update project budget

  • unanet_get_project_status - Get project status and dashboard metrics

Time & Expense Tracking

  • unanet_submit_timesheet - Submit time entries

  • unanet_get_timesheets - Retrieve timesheets for a date range

  • unanet_submit_expense - Submit expense reports

  • unanet_approve_timesheet - Approve submitted timesheets

Contact Management

  • unanet_create_contact - Create new contacts

  • unanet_update_lead - Update lead information

  • unanet_create_opportunity - Create new opportunities

  • unanet_get_company_info - Get company details

Financial Operations

  • unanet_get_billing_status - Get project billing information

  • unanet_generate_invoice - Generate project invoices

  • unanet_get_financial_report - Generate various financial reports

Resources Available

  • unanet://projects/active - List of active projects

  • unanet://timesheets/templates - Timesheet templates and common entries

Installation

  1. Download the project:

    • Download from GitHub as a ZIP file

    • Extract to C:\UnanetMCP\

  2. Run the automated setup:

    • Double-click setup-windows.bat

    • Follow the prompts

That's it! See Windows Setup Guide for detailed instructions.

🐧 Mac/Linux Users

  1. Clone this repository:

git clone https://github.com/culstrup/unanet-mcp-server.git
cd unanet-mcp-server
  1. Install dependencies:

npm install
  1. Build the project:

npm run build
  1. Set up your environment variables:

cp .env.example .env
# Edit .env with your Unanet credentials

Configuration

Environment Variables

Create a .env file with your Unanet credentials:

UNANET_USERNAME=your-username
UNANET_PASSWORD=your-password
UNANET_API_KEY=your-api-key
UNANET_FIRM_CODE=your-firm-code
UNANET_BASE_URL=https://your-instance.unanet.com

Claude Desktop Configuration

Add the following to your Claude Desktop configuration file:

macOS: ~/Library/Application Support/Claude/claude_desktop_config.json Windows: %APPDATA%\Claude\claude_desktop_config.json

{
  "mcpServers": {
    "unanet": {
      "command": "node",
      "args": ["/absolute/path/to/unanet-mcp-server/dist/index.js"],
      "env": {
        "UNANET_USERNAME": "your-username",
        "UNANET_PASSWORD": "your-password",
        "UNANET_API_KEY": "your-api-key",
        "UNANET_FIRM_CODE": "your-firm-code",
        "UNANET_BASE_URL": "https://your-instance.unanet.com"
      }
    }
  }
}

Usage Examples

Once configured, you can interact with Unanet through Claude:

Project Management

"Show me all active projects"
"Get details for project ABC123"
"Update the budget for project XYZ to $150,000"
"What's the status of the government contract project?"

Time Tracking

"Submit 8 hours for project ABC123 for today"
"Show my timesheets for last week"
"Approve timesheet TS-2024-001"

Financial Reports

"Generate a project profitability report for Q4"
"Show billing status for project DEF456"
"Create an invoice for the last billing period"

Contact Management

"Create a new contact: John Smith from ABC Corp"
"Update the lead status to 'Proposal' with 75% probability"
"Create a new opportunity worth $500k closing next month"

Development

Running in Development Mode

npm run dev

Project Structure

src/
ā”œā”€ā”€ index.ts           # Main server entry point
ā”œā”€ā”€ auth.ts            # Authentication handling
ā”œā”€ā”€ tools/             # MCP tool implementations
│   ā”œā”€ā”€ projects.ts    # Project management tools
│   ā”œā”€ā”€ timesheet.ts   # Time/expense tools
│   ā”œā”€ā”€ contacts.ts    # Contact management
│   └── financials.ts  # Financial tools
ā”œā”€ā”€ resources/         # MCP resource providers
│   └── reports.ts     # Report resources
└── types/             # TypeScript type definitions
    └── unanet.ts      # Unanet API types

Adding New Tools

  1. Create a new tool in the appropriate file under src/tools/

  2. Export the tool definition with:

    • name: Unique tool identifier

    • description: Clear description of what the tool does

    • inputSchema: Zod schema for input validation

    • handler: Async function that executes the tool

  3. Import and add the tool to the tools array in src/index.ts

Security Considerations

  • Never commit your .env file

  • Use environment variables for all sensitive data

  • The server implements rate limiting protection

  • All API calls use HTTPS

  • Credentials are transmitted using Basic Auth + API Key

Troubleshooting

Authentication Errors

  • Verify your credentials in the .env file

  • Ensure your API key has the necessary permissions

  • Check that your firm code is correct

Connection Issues

  • Verify the UNANET_BASE_URL is correct

  • Check network connectivity

  • Ensure the Unanet API is accessible from your network

Claude Desktop Integration

  • Restart Claude Desktop after configuration changes

  • Check the logs for any MCP connection errors

  • Verify the absolute path to the server is correct

Support

For issues or questions:

  1. Check the Unanet API documentation

  2. Review the MCP documentation at https://modelcontextprotocol.io

  3. Open an issue in this repository

šŸŽÆ Getting Started Today

Option 1: Quick Setup (Windows)

  1. Download this repository

  2. Run setup-windows.bat

  3. Start asking Claude about your Unanet data!

Option 2: Manual Setup See Installation for Mac/Linux or advanced setup

šŸ’¬ Join the Conversation

Are you using AI to transform your GovCon operations? Let's connect!

  • 🌟 Star this repo if you find it useful

  • šŸ”„ Share your Unanet automation success stories

  • šŸ’” Suggest features or improvements via Issues

About GSD at Work LLC

We help GovCon CEOs integrate AI into their core business operations and accelerate growth. From DoD contractors to civilian agencies, we're transforming how government contractors work.

What We Do:

  • AI Strategy & Implementation for GovCons

  • ERP Integration & Automation

  • Custom AI Solutions for Compliance & Operations

Let's Talk: christian@gsdat.work | gsdat.work


Because your time should be spent winning contracts, not wrestling with ERPs.

License

MIT License - Copyright (c) 2025 GSD at Work LLC - See LICENSE file for details

Available Tools

15 tools
unanet_approve_timesheetB

Approve a submitted timesheet

ParametersJSON Schema
NameRequiredDescriptionDefault
commentsNoApproval comments
timesheetIdYesThe ID of the timesheet to approve

TDQS

B3.4/5.0
Behavior2/5

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

With no annotations, the description must disclose behavioral traits, but it only states the action. It does not mention side effects (e.g., irreversible, sends notifications), required state of the timesheet, or response format. This is minimal beyond the name.

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

Conciseness5/5

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

The description is a single concise sentence with no unnecessary words, front-loading the essential action.

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

Completeness2/5

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

Despite the simple tool shape (2 params, no output schema), the absence of annotations means the description should supply context about the approval workflow, such as checking timesheet status or using get_timesheets first. It lacks this, leaving the agent under-informed.

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

Parameters3/5

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

Schema description coverage is 100%, with both parameters having clear descriptions (timesheetId and comments). The tool description adds no extra parameter meaning, so the baseline of 3 applies.

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

Purpose5/5

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

The description uses a specific verb 'Approve' with the resource 'timesheet', making the action clear. It is distinct from siblings like submit_timesheet and get_timesheets, which are different operations.

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

Usage Guidelines3/5

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

The description implies it is used for approving timesheets but provides no explicit guidance on when to use it versus alternatives, nor any prerequisites like timesheet status or required permissions.

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

unanet_create_contactC

Create a new contact in Unanet

ParametersJSON Schema
NameRequiredDescriptionDefault
emailYes
notesNo
phoneNo
titleNo
companyNo
lastNameYes
firstNameYes

TDQS

C2.4/5.0
Behavior1/5

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

The description merely restates the tool name with no additional behavioral disclosure. There are no annotations, so the description should explain side effects, permissions, duplicate handling, or required fields, but it does not.

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

Conciseness3/5

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

The description is a single, concise sentence that is easy to parse, but it lacks any additional structure or useful detail. It is not a tautology but is minimally informative.

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

Completeness1/5

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

Given the tool has 7 parameters, no annotations, and no output schema, the description is far too sparse. An agent cannot determine required fields, potential errors, or expected response without more information.

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

Parameters1/5

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

The input schema has no descriptions for its seven parameters, and the description does not mention any parameter names or constraints. The agent must infer meaning from 'firstName', 'lastName', and 'email' without any added context.

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

Purpose5/5

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

The description clearly states the tool's function: creating a new contact in Unanet. It uses a specific verb ('Create') and names the resource ('contact'), which distinguishes it from sibling tools like updating leads or creating opportunities.

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

Usage Guidelines2/5

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

No guidance is provided on when to use this tool versus alternatives. There is no mention of prerequisites, whether this is for new contacts only, or how it differs from update operations.

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

unanet_create_opportunityC

Create a new opportunity in Unanet

ParametersJSON Schema
NameRequiredDescriptionDefault
nameYes
notesNo
stageYes
valueYes
closeDateYesExpected close date in YYYY-MM-DD format
contactIdNo
descriptionNo
probabilityYes

TDQS

C2.6/5.0
Behavior1/5

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

With no annotations provided, the description carries the full burden of behavioral disclosure, but it says nothing about side effects, permissions, validation, or failure modes. This is a critical gap for a mutation tool.

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

Conciseness5/5

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

The description is a single sentence that is front-loaded and free of fluff. It effectively communicates the tool's primary action without unnecessary detail.

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

Completeness1/5

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

For a creation tool with 8 parameters, no annotations, and no output schema, this description is far from complete. It omits required fields, constraints, and behavioral context, making it inadequate for an agent to invoke correctly.

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

Parameters1/5

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

The description adds zero information about the 8 parameters. Schema description coverage is only 13%, so the agent must rely on parameter names alone, leaving ambiguous fields like 'stage' undefined.

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

Purpose5/5

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

The description clearly states the verb 'Create' and the resource 'opportunity' within Unanet, distinguishing it from sibling tools like unanet_create_contact. It is specific and unambiguous.

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

Usage Guidelines2/5

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 alternatives. It merely states the action without any context, exclusions, or mention of related tools like unanet_update_lead.

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

unanet_generate_invoiceB

Generate an invoice for a project

ParametersJSON Schema
NameRequiredDescriptionDefault
notesNo
periodEndYesEnd date for the invoice period (YYYY-MM-DD)
projectIdYesThe ID of the project
periodStartYesStart date for the invoice period (YYYY-MM-DD)
includeExpensesNo

TDQS

B3.1/5.0
Behavior2/5

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

No annotations are provided, so the description must disclose side effects and consequences. 'Generate' is vague—it does not clarify whether this creates a draft, posts the invoice, triggers billing workflows, or requires specific permissions. The agent is left unaware of the tool's impact on project data or external systems.

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

Conciseness5/5

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

The description is a single, front-loaded sentence with no redundant wording. It is appropriately sized for the tool's simple purpose, containing no filler or unnecessary details.

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

Completeness2/5

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

The tool has no output schema and no annotations, so the description must explain return values, side effects, and edge cases. It does none of this—there is no mention of what the agent can expect after calling the tool, such as invoice ID, status, or errors. This is a significant gap for an action with likely financial implications.

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

Parameters2/5

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

The schema covers descriptions for projectId, periodStart, and periodEnd, but notes and includeExpenses lack explanations. The description adds no meaning beyond 'for a project', which is already evident from the schema. With 60% schema coverage and zero additional parameter context, this dimension is weak.

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

Purpose5/5

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

The description clearly states the verb 'generate' and the resource 'invoice for a project', making the tool's purpose unambiguous. It is distinct from sibling tools, none of which generate invoices, so it is easily distinguished.

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

Usage Guidelines2/5

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 like unanet_get_billing_status or unanet_get_financial_report. It fails to mention prerequisites, such as needing billable project hours or a finalized timesheet, leaving the agent without context for selection.

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

unanet_get_billing_statusC

Get billing status and information for a project

ParametersJSON Schema
NameRequiredDescriptionDefault
projectIdYesThe ID of the project

TDQS

C2.9/5.0
Behavior2/5

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

With no annotations, the description carries the full burden of behavioral disclosure. It does not mention whether the operation is read-only, does not describe the return format, or any side effects. The generic 'Get' implies a read operation but provides no explicit safety or context.

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

Conciseness4/5

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

The description is a single sentence with a clear verb and object, keeping it appropriately concise. It is front-loaded and easy to parse, with no wasted words.

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

Completeness2/5

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

For a tool with no output schema and no annotations, the description should explain return values or usage context. It lacks information on what 'billing status and information' includes, and does not differentiate from sibling tools, making it incomplete for an agent to invoke correctly.

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

Parameters3/5

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

The schema already documents projectId with 100% coverage, so the description does not need to add parameter details. However, the description does not add any semantic context beyond the schema, such as examples or what constitutes a billing status.

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

Purpose4/5

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

The description uses a specific verb 'Get' and resource 'billing status and information for a project', clearly indicating the tool's function. It is distinguishable from siblings like unanet_get_project_status by the billing focus, though it does not explicitly name alternatives.

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

Usage Guidelines2/5

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

No guidance is provided on when to use this tool versus alternatives like unanet_get_project_status or unanet_get_project_details. The description only states what it does, leaving the choice implicit.

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

unanet_get_company_infoC

Get detailed information about a company

ParametersJSON Schema
NameRequiredDescriptionDefault
companyIdYesThe ID of the company
includeContactsNo

TDQS

C2.9/5.0
Behavior2/5

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

No annotations are provided, so the description carries the full burden for behavioral disclosure. It only says 'get' and gives no information about return format, permissions, side effects, error behavior, or whether the response includes contacts.

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

Conciseness4/5

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

The description is a single concise sentence with no wasted words and front-loads the action. It is appropriately brief for the tool's apparent simplicity, though it omits useful detail that would make it more helpful.

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

Completeness2/5

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

With no output schema and no annotations, the description should provide more context about what 'detailed information' includes and how the includeContacts parameter affects results. It leaves significant gaps that an agent would need to infer.

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

Parameters2/5

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

The schema describes companyId but includeContacts is undocumented. The description adds no parameter-level meaning and does not compensate for the incomplete schema documentation, despite the schema coverage being only 50%.

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

Purpose4/5

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

The description clearly states the action ('Get') and resource ('company'), which distinguishes it from sibling tools focused on projects, timesheets, and invoices. However, 'detailed information' is somewhat generic and does not specify what fields or scope are included.

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

Usage Guidelines3/5

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

The description implies when to use the tool (when company details are needed) based on the resource name, but it provides no explicit alternatives, prerequisites, or exclusions. It does not mention when not to use it or how it compares to other tools.

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

unanet_get_financial_reportC

Generate and retrieve financial reports from Unanet

ParametersJSON Schema
NameRequiredDescriptionDefault
formatNosummary
endDateYesReport end date (YYYY-MM-DD)
projectIdNoOptional: Filter by specific project
startDateYesReport start date (YYYY-MM-DD)
reportTypeYes

TDQS

C2.7/5.0
Behavior2/5

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

With no annotations, the description is the only source of behavioral transparency. It only says 'generate and retrieve' without disclosing side effects, whether the report generation is synchronous or asynchronous, required permissions, or data scope. This is insufficient for a tool that likely creates and returns reports.

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

Conciseness4/5

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

The description is a single, compact sentence with no redundant words. It is front-loaded and easy to parse, though it sacrifices detail for brevity. The conciseness itself is good, but it borders on under-specification.

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

Completeness2/5

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

Given the tool has 5 parameters (including 2 enums) and no output schema, the description is far too sparse to be complete. It does not explain the variants of financial reports, the meaning of format options, or what the return value looks like. This leaves significant gaps 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.

Parameters2/5

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

The input schema covers only 60% of parameters (endDate, projectId, startDate have descriptions, while format and reportType do not). The description adds no parameter-level meaning, such as what report types are available or how format affects the output. The agent must infer parameter semantics solely from the sparse schema.

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

Purpose4/5

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

The description states a clear action ('generate and retrieve') and resource ('financial reports from Unanet'), which is specific enough to understand the basic purpose. However, it does not distinguish this tool from sibling tools like unanet_get_billing_status or unanet_generate_invoice, so it lacks sibling differentiation.

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

Usage Guidelines2/5

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. It does not mention prerequisites, typical scenarios, or situations where a different tool would be more appropriate. This leaves the agent without contextual cues for tool selection.

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

unanet_get_project_detailsC

Get detailed information about a specific project

ParametersJSON Schema
NameRequiredDescriptionDefault
projectIdYesThe ID of the project to retrieve

TDQS

C2.9/5.0
Behavior2/5

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

With no annotations, the description must carry the transparency burden. It only restates the function without clarifying read-only behavior, what 'detailed information' includes, or any potential side effects. This is a basic retrieval, but the description adds little beyond the tool name.

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

Conciseness5/5

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

The description is a single sentence with no filler, effectively front-loaded and concise.

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

Completeness2/5

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

For a simple single-parameter retrieval tool, the description is too sparse. It lacks any context about return format, usage context, or differentiation from sibling tools, leaving the agent to infer when and how to invoke it correctly.

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

Parameters3/5

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

The input schema covers the single parameter (projectId) with a clear description, so schema coverage is 100%. The description does not add extra semantic detail, but the baseline of 3 is appropriate given the schema's completeness.

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

Purpose4/5

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

The description clearly states the action (get) and the resource (detailed information about a specific project). It distinguishes itself from siblings like unanet_get_projects by focusing on a single project, though 'detailed' is somewhat vague.

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

Usage Guidelines2/5

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

No guidance is provided on when to use this tool versus alternatives such as unanet_get_projects or unanet_get_project_status. The description does not mention exclusions or preferred scenarios.

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

unanet_get_projectsC

Get a list of all projects from Unanet

ParametersJSON Schema
NameRequiredDescriptionDefault
limitNo
statusNoAll

TDQS

C2.6/5.0
Behavior2/5

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

No annotations are provided, so the description carries the full burden of behavioral disclosure. It indicates a read operation, but it claims to return 'all projects' while the schema includes a limit parameter defaulting to 50, implying potential truncation. It also does not mention how status filtering affects results or any pagination behavior, leaving key behaviors undisclosed.

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

Conciseness4/5

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

The description is concise, only eight words, and front-loads the core action. It is efficient and free of fluff. However, it is under-specified for a tool with two optional parameters, but conciseness itself is strong and the sentence is structurally sound.

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

Completeness2/5

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

Given the lack of annotations, output schema, and the presence of optional parameters, the description is too sparse. It does not explain how to use the limit or status filters, what the return value looks like, or that 'all projects' may be limited. This leaves critical context missing for an agent to correctly invoke the tool beyond its basic purpose.

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

Parameters1/5

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

The schema description coverage is 0%, and the description does not mention the 'limit' or 'status' parameters at all. Since the schema already provides basic definitions (types, enum, defaults), the description adds no additional meaning. For a tool with low schema coverage, the description must compensate, but it fails to do so.

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

Purpose4/5

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

The description uses the specific verb 'Get' and identifies the resource as 'a list of all projects' from Unanet, which clearly indicates a list operation. This distinguishes it from sibling tools like unanet_get_project_details and unanet_get_project_status, which target specific project details or statuses. However, it does not explicitly name alternatives, so it falls short of a perfect score.

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

Usage Guidelines2/5

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

The description provides no explicit guidance on when to use this tool versus alternatives. It simply states the action without mentioning contexts, exclusions, or comparing to the many sibling tools. The only implied usage is that it lists all projects, but no alternative scenarios are addressed.

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

unanet_get_project_statusC

Get the current status and dashboard data for a project

ParametersJSON Schema
NameRequiredDescriptionDefault
projectIdYesThe ID of the project

TDQS

C2.9/5.0
Behavior2/5

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

Annotations are absent, so the description carries the full burden. It indicates a read operation ('Get') but provides no behavioral detail such as response format, contained data fields, permission requirements, or whether the data is real-time or cached. The meaning of 'dashboard data' is left entirely undefined.

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

Conciseness4/5

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

The description is a single, front-loaded sentence that names the action and resource without fluff. However, the term 'dashboard data' is vague, slightly undermining clarity, but this is a conciseness and structure question, not a completeness issue.

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

Completeness2/5

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

With no output schema, the description should clarify what 'current status and dashboard data' means, but it does not. The tool is also ambiguous against sibling unanet_get_project_details, and no usage context or return details are provided, making the description insufficient for an agent to confidently invoke the tool.

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

Parameters3/5

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

The schema fully documents the single parameter projectId with 'The ID of the project', and the description adds no extra semantic detail. Since schema coverage is 100%, the baseline of 3 applies; the description neither enhances nor clarifies beyond the schema.

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

Purpose4/5

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

The description uses a specific verb ('Get') and identifies the resource ('project status' and 'dashboard data'), clearly conveying the tool's primary purpose. However, it does not distinguish itself from the sibling tool unanet_get_project_details, so the boundary is implicit rather than explicit.

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

Usage Guidelines2/5

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 alternatives like unanet_get_project_details or unanet_get_billing_status. The description implies it is for retrieving status/dashboard information, but it neither states exclusive use cases nor mentions any exclusions.

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

unanet_get_timesheetsC

Retrieve timesheets for a date range

ParametersJSON Schema
NameRequiredDescriptionDefault
statusNoAll
endDateYesEnd date in YYYY-MM-DD format
startDateYesStart date in YYYY-MM-DD format

TDQS

C2.9/5.0
Behavior2/5

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

No annotations are provided, so the description carries the full burden. It only says 'Retrieve timesheets for a date range' — this is already implied by the tool name. It does not disclose default status behavior (e.g., whether 'All' is used), response format, pagination, or any read-only guarantees beyond the verb 'Retrieve' which is inferred.

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

Conciseness4/5

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

The description is a single concise sentence with no fluff. It front-loads the action and resource. However, its brevity borders on under-specification, but that is a completeness issue, not conciseness.

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

Completeness2/5

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

The tool has no output schema and no annotations, so the description should provide more context. It omits any mention of default status behavior, possible filters, response structure, or authentication requirements. For a 3-parameter tool, this is insufficient for confident use.

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

Parameters2/5

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

Schema description coverage is 67%, but the description adds no meaning beyond the schema. It mentions 'date range' which aligns with startDate/endDate, but the schema already describes those. The status parameter, which is not covered in the description, is left entirely unexplained. The description does not compensate for the missing schema coverage.

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

Purpose5/5

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

The description uses a specific verb 'Retrieve' and names the resource 'timesheets', with a date-range scope. This clearly distinguishes it from sibling tools like submit_timesheet or approve_timesheet, and it 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.

Usage Guidelines2/5

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

The description does not state when to use this tool versus alternatives. There is no mention of exclusions, prerequisites, or related tools (e.g., when to use submit_timesheet instead). It only implies its purpose through the verb and resource.

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

unanet_submit_expenseC

Submit an expense report to Unanet

ParametersJSON Schema
NameRequiredDescriptionDefault
dateYesDate in YYYY-MM-DD format
amountYes
categoryYesExpense category (e.g., Travel, Meals, Supplies)
projectIdYes
descriptionYes
reimbursableNo

TDQS

C2.4/5.0
Behavior1/5

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

No annotations exist, so the description carries full responsibility for disclosure. It merely restates the tool's name ('Submit an expense report') without any details on side effects, required permissions, error states, or what happens after submission.

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

Conciseness4/5

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

The description is a single sentence with no redundant words, making it concise and front-loaded. However, it is too brief to be fully useful, but for conciseness it's appropriate length.

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

Completeness2/5

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

For a submit action with 6 parameters, no annotations, and no output schema, the description is severely underspecified. It fails to cover prerequisites, success/failure behavior, or parameter details, leaving the agent with too little context to invoke the tool correctly.

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

Parameters1/5

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

With only 33% schema description coverage, the description must compensate, but it mentions no parameters at all. It adds no value beyond the schema fields that have descriptions.

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

Purpose4/5

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

The description uses the specific verb 'Submit' and names the resource 'an expense report', clearly indicating the action. It distinguishes from sibling 'unanet_submit_timesheet' by the resource type, though it doesn't explicitly contrast them.

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

Usage Guidelines2/5

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

Provides no guidance on when to use this tool versus alternatives like unanet_submit_timesheet or unanet_update_project_budget. It only states the basic action, leaving the agent to infer usage from the name.

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

unanet_submit_timesheetC

Submit time entries to Unanet

ParametersJSON Schema
NameRequiredDescriptionDefault
entriesYes

TDQS

C2.9/5.0
Behavior2/5

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

With no annotations provided, the description carries the full burden of behavioral disclosure. However, it merely says 'Submit time entries to Unanet' without revealing what happens upon submission, such as whether it is irreversible, requires prior approval, or affects existing records. This is a significant gap for a mutation tool, as the agent cannot assess potential side effects or required permissions.

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

Conciseness5/5

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

The description is one short sentence with no unnecessary words. It is front-loaded with the action and resource, and the phrase 'to Unanet' reinforces the destination without being redundant. Every word contributes to the purpose.

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

Completeness2/5

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

Given the moderate complexity (an array of entries with nested fields) and absence of annotations or output schema, the description is insufficient. It does not clarify the submission workflow, expected outcomes, or any constraints. The agent lacks essential context to use the tool correctly beyond the bare schema.

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

Parameters1/5

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

The input schema has 0% description coverage, and the description does not compensate. It does not explain what 'entries' means or what fields are necessary (e.g., projectId, date, hours) beyond what the schema already shows. The agent gets no added semantic meaning from the description.

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

Purpose5/5

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

The description clearly states the action ('Submit') and the resource ('time entries'), making it immediately clear what the tool does. It also distinguishes itself from sibling tools like unanet_submit_expense (expense submission) and unanet_get_timesheets (retrieval), correctly identifying its unique scope of submitting time entries.

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

Usage Guidelines2/5

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. It does not mention any prerequisites, exclusions, or conditions under which another sibling tool (e.g., unanet_approve_timesheet or unanet_get_timesheets) would be more appropriate. The only implied usage is that one would use it to submit time entries, which offers no strategic direction for an agent.

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

unanet_update_leadC

Update lead information in Unanet

ParametersJSON Schema
NameRequiredDescriptionDefault
notesNo
valueNo
leadIdYes
statusNo
probabilityNo

TDQS

C2.3/5.0
Behavior1/5

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

No annotations are provided, so the description carries the full burden of behavioral disclosure. It merely restates the tool's purpose ('update lead information') without revealing effects, permissions, idempotency, or any other behavioral traits.

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

Conciseness2/5

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

The description is extremely short (one sentence), but it under-specifies rather than being concise. It provides no structural value beyond the tool name, so it is not appropriately sized.

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

Completeness1/5

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

With 5 parameters, no output schema, and no annotations, the description is severely incomplete. It gives no context about required fields, validation, return values, or side effects, making it inadequate for an agent to use confidently.

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

Parameters1/5

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

Schema description coverage is 0%, and the description adds no meaning to the parameters. It does not explain what 'value', 'probability', or 'notes' mean in the lead context, nor how they are used in an update.

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

Purpose5/5

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

The description clearly states the tool updates lead information in Unanet, using a specific verb ('update') and resource ('lead'). This distinguishes it from sibling tools like unanet_update_project_budget or unanet_create_opportunity.

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

Usage Guidelines2/5

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. It does not mention prerequisites, whether it is for existing leads only, or how it relates to create/read operations.

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

unanet_update_project_budgetB

Update the budget for a specific project

ParametersJSON Schema
NameRequiredDescriptionDefault
notesNoNotes about the budget change
budgetYesThe new budget amount
projectIdYesThe ID of the project to update

TDQS

B3.3/5.0
Behavior2/5

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

No annotations exist, so the description carries the full burden of disclosing behavioral traits. It only indicates a write operation ('Update') without specifying whether the budget is overwritten, whether permissions are required, or what the response will look like.

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

Conciseness5/5

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

The description is a single concise sentence that front-loads the core purpose. There is no redundant or unnecessary information.

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

Completeness3/5

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

For a simple 3-parameter update tool with full schema coverage, the description is minimally viable. However, it lacks any mention of return values, error behavior, or side effects, and there is no output schema or annotations to compensate.

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

Parameters3/5

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

Schema description coverage is 100%, so the baseline is 3. The description mentions 'budget' and 'specific project' but adds no meaningful information beyond the schema, which already describes all three parameters adequately.

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

Purpose5/5

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

The description clearly states the action ('Update') and the resource ('budget for a specific project'), distinguishing it from sibling tools like get_project_status or submit_timesheet. It is unambiguous and specific.

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

Usage Guidelines2/5

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

No guidance is provided on when to use this tool versus alternatives (e.g., get_project_details for viewing budget). There are no prerequisites, exclusions, or context about when updating a budget is appropriate.

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

Tool Schema Changelog

Recent tool additions, removals, and schema changes observed during successful MCP inspections. Dates show when Glama detected each change.

  1. 15 tool updatesv1.0.0
    • First observedunanet_approve_timesheet
    • First observedunanet_create_contact
    • First observedunanet_create_opportunity
    • First observedunanet_generate_invoice
    • First observedunanet_get_billing_status
    • First observedunanet_get_company_info
    • First observedunanet_get_financial_report
    • First observedunanet_get_project_details
    • First observedunanet_get_project_status
    • First observedunanet_get_projects
    • First observedunanet_get_timesheets
    • First observedunanet_submit_expense
    • First observedunanet_submit_timesheet
    • First observedunanet_update_lead
    • First observedunanet_update_project_budget

TDQS

B3.1/5.0
Disambiguation4/5

Most tools are clearly distinct, such as timesheet and expense functions. However, the project-related get tools (get_projects, get_project_details, get_project_status, get_billing_status) overlap in purpose, though each targets a different aspect of a project, which could cause some initial confusion.

Naming Consistency5/5

All tools consistently follow the unanet_verb_noun pattern, using clear and predictable verbs like get, update, submit, create, approve, and generate. This uniform structure makes the tool set highly navigable.

Tool Count5/5

With 15 tools covering projects, timesheets, expenses, CRM, and billing, the count is well within the typical 3-15 range and each tool serves a specific purpose without bloat. The scope is appropriate for an ERP connector.

Completeness3/5

The tool set covers core workflows but has notable gaps: expenses only have submit (no get or approve), opportunities only have create, leads only have update, and there is no project creation or deletion. This uneven CRUD coverage means some operations are missing, though the core actions are present.

Maintenance

ActivityInactive
ResponsivenessNo issues

Resources

Unclaimed servers have limited discoverability.

Looking for Admin?

If you are the server author, to access and configure the admin panel.

Related MCP Connectors

Related MCP Servers

  • A
    license
    Not graded
    quality
    D
    maintenance
    Enables comprehensive interaction with ERPNext systems through natural language, providing secure access to any document type (customers, items, invoices, etc.) with enterprise-grade permission controls and audit logging.
    MIT
  • A
    license
    A
    quality
    C
    maintenance
    Enables interaction with the Kion platform for cloud cost management, governance, and compliance through natural language.
    2
    7
    MIT
  • A
    license
    A
    quality
    A
    maintenance
    Enables financial professionals to interact with QuickBooks Online using natural language for reports, journal entries, bills, expenses, and more.
    36
    893
    11
    MIT
  • F
    license
    Not graded
    quality
    C
    maintenance
    Enables natural language conflict-of-interest checks, historical relationship analysis, and contract review using Verdantas project data and Deltek records.
    -

Latest Blog Posts

MCP directory API

We provide all the information about MCP servers via our MCP API.

curl -X GET 'https://glama.ai/api/mcp/v1/servers/culstrup/unanet-mcp-server'

If you have feedback or need assistance with the MCP directory API, please join our Discord server