Skip to main content
Glama
ishumilin

Zefix MCP Server

by ishumilin
README.md
<div align="center">
  <img src="logo.png" alt="Schwaizer Logo" width="100"/>
  <h1>Schwaizer</h1>
  <h2>MCP Server: Zefix & UID Webservice</h2>
  <p>
    <strong>An unofficial MCP server for interacting with the Swiss Commercial Register.</strong>
  </p>
  <p>
    <em>This is a community project by Schwaizer and is not an official implementation by the Swiss government.</em>
  </p>
</div>

---

### About Schwaizer

> SHAPING SWITZERLAND'S AI FUTURE
> Empowering Swiss businesses and society through responsible AI adoption.
> Founded in 2025, Schwaizer is a non-profit organization dedicated to accelerating the responsible adoption of artificial intelligence across Switzerland.

Website: https://www.schwaizer.ch

---

# Zefix MCP Server

MCP (Model Context Protocol) server providing access to Swiss Company Registry data through Zefix REST API and UID Webservice.

## Features

### Dual API Integration
- **Zefix REST API**: Fast company searches and SOGC (Official Gazette) tracking
- **UID Webservice**: Rich company data including NOGA codes, VAT details, and commercial register information

### Available Tools (9 tools)

#### Zefix API Tools
1. **zefix_search_companies** - Search for Swiss companies using the Zefix API.
2. **zefix_get_company_by_uid** - Get detailed company information from Zefix by UID, with optional UID Webservice enrichment.
3. **zefix_get_daily_registrations** - Get all company registrations and publications from SOGC for a specific date.
4. **zefix_get_company_publications** - Get all SOGC publications for a specific company by UID.

#### UID Webservice Tools
5. **uid_advanced_search** - Advanced company search using the UID Webservice.
6. **uid_validate_uid** - Validate a Swiss UID.
7. **uid_validate_vat_number** - Validate a Swiss VAT number.
8. **uid_get_company_details** - Get detailed company information using only the UID Webservice.

#### Combined API Tools
9. **generate_due_diligence_report** - Generate a comprehensive due diligence report combining data from both Zefix and UID Webservice.

## Installation

```bash
npm install
```

## Configuration

Copy `.env.example` to `.env` and configure:

```env
# Zefix REST API Credentials (required for Zefix tools)
# Note: Credentials must be requested from Federal Registry of Commerce
ZEFIX_USERNAME=your_username
ZEFIX_PASSWORD=your_password

# UID Webservice (no auth needed for Public Services)
UID_PUBLIC_URL=https://www.uid-wse.admin.ch/V5.0/PublicServices.svc?wsdl

# Optional settings
CACHE_ENABLED=true
CACHE_TTL=3600
LOG_LEVEL=info
```

## Usage

### Running the Server

```bash
npm start
```

### Example Tool Calls

#### Search for companies (Zefix)
```javascript
{
  "name": "zefix_search_companies",
  "arguments": {
    "name": "Migros",
    "canton": "ZH",
    "activeOnly": true
  }
}
```

#### Get company details (Zefix + UID)
```javascript
{
  "name": "zefix_get_company_by_uid",
  "arguments": {
    "uid": "CHE-123.456.789",
    "enrichWithUidData": true
  }
}
```

#### Validate UID (UID Webservice)
```javascript
{
  "name": "uid_validate_uid",
  "arguments": {
    "uid": "CHE-123.456.789"
  }
}
```

#### Generate due diligence report (Zefix + UID)
```javascript
{
  "name": "generate_due_diligence_report",
  "arguments": {
    "uid": "CHE-123.456.789",
    "includePublications": true
  }
}
```

#### Get daily registrations (Zefix)
```javascript
{
  "name": "zefix_get_daily_registrations",
  "arguments": {
    "date": "2025-11-15"
  }
}
```

## API Documentation

### Zefix REST API
- Base URL: `https://www.zefix.admin.ch/ZefixPublicREST/api/v1`
- Authentication: Basic Auth
- SOGC publications:
  - Per-company publications are returned via `GET /api/v1/company/uid/{uid}` in the `sogcPub[]` field of the company payload (there is no `GET /api/v1/sogc/uid/{uid}` endpoint).
  - Daily publications are available via `GET /api/v1/sogc/bydate/{date}`.

### UID Webservice
- Public Services URL: `https://www.uid-wse.admin.ch/V5.0/PublicServices.svc?wsdl`
- Protocol: SOAP
- Authentication: None required for Public Services

## Data Sources

- **Zefix**: Federal Commercial Register (Handelsregister)
- **UID Register**: Federal Business and Enterprise Register
- **SOGC/SHAB**: Swiss Official Gazette of Commerce

## Caching

The server implements intelligent caching:
- Search results: 30 minutes
- Company details: 1 hour
- SOGC data: 6 hours
- UID/VAT validation: 1-24 hours
- Reference data: 24 hours

## Error Handling

All tools include comprehensive error handling:
- Input validation with Zod schemas
- API error handling with retries
- Graceful fallbacks when enrichment fails
- Detailed error messages in responses

## Development

### Project Structure
```
zefix-mcp-server/
├── src/
│   ├── index.js              # MCP server entry point
│   ├── config.js             # Configuration
│   ├── api/
│   │   ├── zefix-client.js   # Zefix REST client
│   │   ├── uid-client.js     # UID SOAP client
│   │   └── schemas.js        # Validation schemas
│   ├── tools/
│   │   ├── company-search.js # Search tools
│   │   ├── validation.js     # Validation tools
│   │   ├── sogc.js          # SOGC tools
│   │   └── due-diligence.js # Due diligence tool
│   └── utils/
│       ├── logger.js         # Logging
│       ├── cache.js          # Caching
│       └── formatting.js     # Formatting utilities
├── .env                      # Environment variables
├── package.json
└── README.md
```

### Running Tests
```bash
npm test
```

### Linting
```bash
npm run lint
```

### Scripts

Helper scripts (for local development and manual checks):

- `scripts/describe-wsdl.mjs` — Inspect/describe UID Webservice WSDL structure
- `scripts/test-uid-search.mjs` — Exercise UID search endpoints with sample queries
- `scripts/test-uid-search-variants.mjs` — Try multiple UID search variants

Run examples:
```bash
node scripts/describe-wsdl.mjs
node scripts/test-uid-search.mjs "CHE-123.456.789"
node scripts/test-uid-search-variants.mjs "Migros"
```

## License

MIT

## Support

For issues with:
- **Zefix API**: Contact Zefix support zefix@bj.admin.ch
- **UID Webservice**: Contact uid@bfs.admin.ch
- **This MCP Server**: Open an issue on GitHub

TDQS

B3.4/5.0

Scored across 9 tools

Disambiguation3/5

There is notable overlap between 'get_company_by_uid' and 'get_company_details_uid' (both retrieve company details via UID but from different sources), as well as between 'search_companies' and 'advanced_search' (both perform searches with slightly different filter sets). While descriptions clarify differences, an agent could easily select the wrong tool in many scenarios.

Naming Consistency3/5

Tool names predominantly follow a verb_noun pattern, but inconsistencies exist: 'advanced_search' uses an adjective prefix instead of a verb, while 'get_company_by_uid' and 'get_company_details_uid' include prepositions in the noun part. The mix of 'search_' and 'get_' verbs is acceptable, but the varying structures reduce predictability.

Tool Count5/5

With 9 tools, the set is well-scoped for a Swiss company registry server. Each tool addresses a distinct functional need (search, details, validation, publications, report generation) without unnecessary bloat or missing essential operations for this domain.

Completeness5/5

The tool surface covers all typical use cases for a read-only company registry: searching, retrieving detailed company info (via two complementary services), validating identifiers (UID and VAT), fetching publications and daily registrations, and generating due diligence reports. No obvious gaps are present.

Maintenance

ActivityInactive
ResponsivenessNo issues