Skip to content

Commit c378671

Browse files
BloqAITeamclaude
andcommitted
Distribution & showcase: topics, issues, contributing, directory prep
- Add 14 GitHub topics for discoverability (zatca, mcp, saudi-arabia, etc.) - Set homepage URL to fikrah.ai - Create 4 GitHub issues (3 good-first-issue) to invite contributors - Add CONTRIBUTING.md with setup and contribution guide - Add "Built with zatca-mcp" section to README with Fikrah breadcrumb - Add Contributing section to README linking to good first issues - Improve demo placeholder with natural language example - Add glama.json for Glama.ai directory ownership claim - Add DIRECTORY_SUBMISSIONS.md with exact copy-paste content for punkpeye/awesome-mcp-servers, mcpservers.org, and Glama.ai - server.py: add render_invoice_html tool, update to instructions field Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
1 parent e6f0144 commit c378671

5 files changed

Lines changed: 167 additions & 7 deletions

File tree

CONTRIBUTING.md

Lines changed: 46 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,46 @@
1+
# Contributing to ZATCA MCP
2+
3+
Thanks for your interest in contributing! This is the first open-source MCP server for Saudi e-invoicing, and contributions are welcome.
4+
5+
## Getting Started
6+
7+
```bash
8+
git clone https://github.com/DoubleH10/zatca-mcp.git
9+
cd zatca-mcp
10+
pip install -e ".[dev,phase2]"
11+
```
12+
13+
## Running Tests
14+
15+
```bash
16+
pytest tests/ -v # All tests
17+
pytest tests/ -v -m "not sandbox" # Skip live ZATCA sandbox tests
18+
```
19+
20+
## Code Quality
21+
22+
We use ruff for linting/formatting and mypy for type checking:
23+
24+
```bash
25+
ruff check src/ tests/
26+
ruff format --check src/ tests/
27+
mypy src/zatca_mcp/ --ignore-missing-imports
28+
```
29+
30+
All checks run in CI across Python 3.10, 3.11, and 3.12.
31+
32+
## Making Changes
33+
34+
1. Fork the repo and create a branch from `main`
35+
2. Make your changes
36+
3. Add or update tests as needed
37+
4. Ensure all tests pass and linting is clean
38+
5. Open a PR with a clear description of what you changed and why
39+
40+
## Good First Issues
41+
42+
Check the [good first issue](https://github.com/DoubleH10/zatca-mcp/labels/good%20first%20issue) label for beginner-friendly tasks.
43+
44+
## Questions?
45+
46+
Open an issue or start a discussion. We're happy to help you get started.

DIRECTORY_SUBMISSIONS.md

Lines changed: 75 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,75 @@
1+
# MCP Directory Submissions Checklist
2+
3+
Action items for getting zatca-mcp listed across MCP directories.
4+
5+
---
6+
7+
## 1. punkpeye/awesome-mcp-servers (PR) — DO FIRST
8+
9+
**This is the highest-impact listing. Glama.ai auto-syncs from it.**
10+
11+
1. Fork https://github.com/punkpeye/awesome-mcp-servers
12+
2. Edit `README.md` — find the `## Finance & Fintech` section
13+
3. Add this line in alphabetical order (after entries starting with "D"):
14+
15+
```markdown
16+
- [DoubleH10/zatca-mcp](https://github.com/DoubleH10/zatca-mcp) 🐍 ☁️ - ZATCA e-invoicing for Saudi Arabia. Generate, validate, sign, and submit tax-compliant XML invoices via MCP.
17+
```
18+
19+
4. Submit PR with title: `Add zatca-mcp — ZATCA e-invoicing server for Saudi Arabia`
20+
5. PR description:
21+
22+
```
23+
Adds zatca-mcp to the Finance & Fintech category.
24+
25+
- First MCP server for Saudi Arabia's ZATCA e-invoicing mandate
26+
- 8 MCP tools: generate, validate, sign, submit invoices + QR codes
27+
- UBL 2.1 XML, 16-rule validation engine, XAdES-BES signing
28+
- Phase 1 + Phase 2 ZATCA compliance
29+
- 100 tests, CI/CD, Python 3.10-3.12, Apache 2.0
30+
- pip-installable: `pip install zatca-mcp`
31+
```
32+
33+
---
34+
35+
## 2. mcpservers.org (web form) — DO SECOND
36+
37+
**This also feeds wong2/awesome-mcp-servers automatically.**
38+
39+
Go to: https://mcpservers.org/submit
40+
41+
Fill in:
42+
43+
| Field | Value |
44+
|-------|-------|
45+
| Server Name | `ZATCA MCP` |
46+
| Short Description | `ZATCA e-invoicing for Saudi Arabia — generate, validate, sign, and submit tax-compliant XML invoices from natural language. 8 MCP tools, UBL 2.1, 16-rule validation, XAdES-BES signing, Phase 1 + Phase 2 support.` |
47+
| Link | `https://github.com/DoubleH10/zatca-mcp` |
48+
| Category | `cloud-service` (closest option — connects to ZATCA APIs) |
49+
| Contact Email | `hadi.hijazi@bloqmedia.net` |
50+
51+
---
52+
53+
## 3. Glama.ai — DO AFTER punkpeye PR merges
54+
55+
Glama auto-syncs from punkpeye/awesome-mcp-servers. Once listed:
56+
57+
1. `glama.json` is already in the repo root (done)
58+
2. Go to https://glama.ai and authenticate with GitHub
59+
3. Search for zatca-mcp and claim ownership
60+
61+
---
62+
63+
## 4. mcp-awesome.com — SKIP FOR NOW
64+
65+
Likely auto-aggregates from other directories. No clear submission mechanism.
66+
Check back after the punkpeye and mcpservers.org listings are live.
67+
68+
---
69+
70+
## Status
71+
72+
- [ ] punkpeye/awesome-mcp-servers PR submitted
73+
- [ ] mcpservers.org form submitted
74+
- [ ] Glama.ai ownership claimed
75+
- [ ] mcp-awesome.com (auto or manual)

README.md

Lines changed: 14 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -13,8 +13,10 @@
1313

1414
</div>
1515

16-
<!-- screenshot: add asciinema/VHS terminal recording here -->
17-
<!-- <p align="center"><img src="docs/demo.gif" width="700" alt="Fikra CLI demo"></p> -->
16+
<!-- TODO: Record a 30-second demo GIF of Claude Desktop generating a ZATCA invoice via natural language -->
17+
<!-- <p align="center"><img src="docs/demo.gif" width="700" alt="Generate a ZATCA-compliant invoice from natural language"></p> -->
18+
19+
<p align="center"><em>"Generate an invoice for 10 hours of consulting at 500 SAR to Al-Rajhi Corp"</em> &rarr; compliant XML + QR code in seconds</p>
1820

1921
---
2022

@@ -510,10 +512,17 @@ mcp dev src/zatca_mcp/server.py
510512
- [ ] HTTP/SSE transport
511513
- [ ] Arabic RTL invoice template
512514

513-
## Built by Fikrah
515+
## Built with zatca-mcp
516+
517+
| Project | Description |
518+
|---------|-------------|
519+
| [Fikrah](https://fikrah.ai) | Agentic AI workforce for financial operations — uses this server as its ZATCA compliance backbone |
520+
521+
> Using zatca-mcp in your project? Open a PR to add it here.
522+
523+
## Contributing
514524

515-
[Fikrah](https://fikrah.ai) is building an agentic AI workforce for financial operations.
516-
This MCP server is the foundation for our Saudi e-invoicing capabilities.
525+
Contributions welcome! See [CONTRIBUTING.md](CONTRIBUTING.md) for setup instructions. Check the [good first issues](https://github.com/DoubleH10/zatca-mcp/labels/good%20first%20issue) for a place to start.
517526

518527
## License
519528

glama.json

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,6 @@
1+
{
2+
"$schema": "https://glama.ai/mcp/schemas/server.json",
3+
"maintainers": [
4+
"DoubleH10"
5+
]
6+
}

src/zatca_mcp/server.py

Lines changed: 26 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -31,11 +31,10 @@
3131
# Create the MCP server
3232
mcp = FastMCP(
3333
"zatca-mcp",
34-
description=(
34+
instructions=(
3535
"ZATCA e-invoicing MCP server for Saudi Arabia. "
3636
"Generate, validate, and manage compliant electronic invoices."
3737
),
38-
version="0.1.0",
3938
)
4039

4140

@@ -602,6 +601,31 @@ async def check_compliance(
602601
return json.dumps({"error": f"ZATCA compliance check failed: {str(e)}"})
603602

604603

604+
# ═══════════════════════════════════════════════════
605+
# TOOL 9: HTML Invoice Rendering
606+
# ═══════════════════════════════════════════════════
607+
608+
@mcp.tool()
609+
async def render_invoice_html(invoice_xml: str) -> str:
610+
"""Render a ZATCA invoice XML as a professional HTML document.
611+
612+
Takes a UBL 2.1 XML invoice (as generated by generate_invoice) and
613+
produces a styled HTML page with embedded QR code image, ready for
614+
viewing in a browser or printing.
615+
616+
Args:
617+
invoice_xml: Complete UBL 2.1 XML invoice string
618+
619+
Returns:
620+
Complete HTML document string with embedded styles and QR code image
621+
"""
622+
try:
623+
from zatca_mcp.cli import generate_html_invoice
624+
return generate_html_invoice(invoice_xml)
625+
except Exception as e:
626+
return json.dumps({"error": f"HTML rendering failed: {str(e)}"})
627+
628+
605629
def main():
606630
"""Entry point for the ZATCA MCP server."""
607631
mcp.run()

0 commit comments

Comments
 (0)