fomu-mcp 0.1.0__tar.gz

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -0,0 +1,65 @@
1
+ Metadata-Version: 2.4
2
+ Name: fomu-mcp
3
+ Version: 0.1.0
4
+ Summary: Kenya civic form agent via MCP — checklists, draft letters, requirements check, eCitizen guide, Huduma Centre, timeline planner. 6 tools.
5
+ License: MIT
6
+ Requires-Python: >=3.10
7
+ Description-Content-Type: text/markdown
8
+ Requires-Dist: fastmcp>=0.9
9
+
10
+ # fomu-mcp
11
+
12
+ > Kenya civic form agent via MCP — turns citizen needs into government form checklists, draft applications, and timeline plans.
13
+
14
+ [![PyPI](https://img.shields.io/badge/PyPI-v0.1.0-blue?logo=pypi)](https://pypi.org/project/fomu-mcp/)
15
+ [![License](https://img.shields.io/badge/License-MIT-green)](https://github.com/gabrielmahia/fomu-mcp)
16
+
17
+ *Fomu (Swahili for "form")*
18
+
19
+ ## Why This Exists
20
+
21
+ > *"Form Agent: turns messy user answers into applications, checklists, letters."*
22
+ > — East Africa AI Infrastructure Schematic
23
+
24
+ Kenya's government processes are documented but navigating them requires knowing what to look for.
25
+ fomu-mcp encodes the institutional knowledge: what to bring, where to go, how long it takes, what to pay.
26
+
27
+ ## Install
28
+
29
+ ```bash
30
+ pip install fomu-mcp
31
+ ```
32
+
33
+ ## Tools (6)
34
+
35
+ | Tool | Function |
36
+ |------|----------|
37
+ | `form_checklist` | Complete requirements list for any Kenya government form |
38
+ | `form_draft_letter` | Generate draft formal letters (introduction, reference, complaint, land inquiry) |
39
+ | `form_requirements_check` | Tell user what they have and what they're missing |
40
+ | `ecitizen_guide` | eCitizen portal service directory |
41
+ | `huduma_centre_guide` | Huduma Centre locations and services by county |
42
+ | `form_timeline_planner` | Sequence multiple processes with estimated completion dates |
43
+
44
+ ## Example
45
+
46
+ ```python
47
+ # Check readiness for business registration
48
+ await call_tool("form_requirements_check", {
49
+ "form_type": "business_registration",
50
+ "user_has": ["national ID", "KRA PIN", "passport photo"]
51
+ })
52
+ # Returns: missing items + completeness % + next step
53
+ ```
54
+
55
+ ## Part of AI-KungFU East Africa Coordination Infrastructure
56
+
57
+ Part of the SII Stack — the Form Agent layer in the 7-agent type framework:
58
+ Research · **Form** · Verification · Translation · Financial · Market · Escalation
59
+
60
+ → [sii-stack](https://github.com/gabrielmahia/sii-stack)
61
+ → [The Nairobi Stack](https://gabrielmahia.github.io/nairobi-stack)
62
+
63
+ ## License
64
+
65
+ MIT © Gabriel Mahia | contact@aikungfu.dev
@@ -0,0 +1,56 @@
1
+ # fomu-mcp
2
+
3
+ > Kenya civic form agent via MCP — turns citizen needs into government form checklists, draft applications, and timeline plans.
4
+
5
+ [![PyPI](https://img.shields.io/badge/PyPI-v0.1.0-blue?logo=pypi)](https://pypi.org/project/fomu-mcp/)
6
+ [![License](https://img.shields.io/badge/License-MIT-green)](https://github.com/gabrielmahia/fomu-mcp)
7
+
8
+ *Fomu (Swahili for "form")*
9
+
10
+ ## Why This Exists
11
+
12
+ > *"Form Agent: turns messy user answers into applications, checklists, letters."*
13
+ > — East Africa AI Infrastructure Schematic
14
+
15
+ Kenya's government processes are documented but navigating them requires knowing what to look for.
16
+ fomu-mcp encodes the institutional knowledge: what to bring, where to go, how long it takes, what to pay.
17
+
18
+ ## Install
19
+
20
+ ```bash
21
+ pip install fomu-mcp
22
+ ```
23
+
24
+ ## Tools (6)
25
+
26
+ | Tool | Function |
27
+ |------|----------|
28
+ | `form_checklist` | Complete requirements list for any Kenya government form |
29
+ | `form_draft_letter` | Generate draft formal letters (introduction, reference, complaint, land inquiry) |
30
+ | `form_requirements_check` | Tell user what they have and what they're missing |
31
+ | `ecitizen_guide` | eCitizen portal service directory |
32
+ | `huduma_centre_guide` | Huduma Centre locations and services by county |
33
+ | `form_timeline_planner` | Sequence multiple processes with estimated completion dates |
34
+
35
+ ## Example
36
+
37
+ ```python
38
+ # Check readiness for business registration
39
+ await call_tool("form_requirements_check", {
40
+ "form_type": "business_registration",
41
+ "user_has": ["national ID", "KRA PIN", "passport photo"]
42
+ })
43
+ # Returns: missing items + completeness % + next step
44
+ ```
45
+
46
+ ## Part of AI-KungFU East Africa Coordination Infrastructure
47
+
48
+ Part of the SII Stack — the Form Agent layer in the 7-agent type framework:
49
+ Research · **Form** · Verification · Translation · Financial · Market · Escalation
50
+
51
+ → [sii-stack](https://github.com/gabrielmahia/sii-stack)
52
+ → [The Nairobi Stack](https://gabrielmahia.github.io/nairobi-stack)
53
+
54
+ ## License
55
+
56
+ MIT © Gabriel Mahia | contact@aikungfu.dev
@@ -0,0 +1,18 @@
1
+ [build-system]
2
+ requires = ["setuptools>=68", "wheel"]
3
+ build-backend = "setuptools.build_meta"
4
+
5
+ [project]
6
+ name = "fomu-mcp"
7
+ version = "0.1.0"
8
+ description = "Kenya civic form agent via MCP — checklists, draft letters, requirements check, eCitizen guide, Huduma Centre, timeline planner. 6 tools."
9
+ readme = "README.md"
10
+ license = { text = "MIT" }
11
+ requires-python = ">=3.10"
12
+ dependencies = ["fastmcp>=0.9"]
13
+
14
+ [project.scripts]
15
+ fomu-mcp = "fomu_mcp.server:mcp.run"
16
+
17
+ [tool.setuptools.packages.find]
18
+ where = ["src"]
@@ -0,0 +1,4 @@
1
+ [egg_info]
2
+ tag_build =
3
+ tag_date = 0
4
+
@@ -0,0 +1,2 @@
1
+ """fomu-mcp v0.1.0"""
2
+ __version__ = "0.1.0"
@@ -0,0 +1,325 @@
1
+ """FomuMCP — Kenya Civic Form Agent (6 tools). DEMO data.
2
+
3
+ Source: Engineer's Schematic — Form Agent type:
4
+ 'Turns messy user answers into applications, checklists, letters.'
5
+
6
+ Fomu (Swahili for 'form') handles Kenya's most common citizen-facing documents.
7
+ """
8
+ from __future__ import annotations
9
+ from typing import Optional
10
+ from fastmcp import FastMCP
11
+ mcp = FastMCP(name="fomu-mcp", description="Kenya civic form agent — generates checklists, guidance, and draft applications for common government processes. DEMO.")
12
+
13
+ # ── Form Definitions ──────────────────────────────────────────────────────────
14
+ FORMS = {
15
+ "business_registration": {
16
+ "name": "Business Name/Company Registration",
17
+ "authority": "Business Registration Service (BRS) via eCitizen",
18
+ "portal": "ecitizen.go.ke",
19
+ "cost_kes": {"sole_proprietorship": 950, "partnership": 1000, "limited_company": 10650},
20
+ "processing_days": 3,
21
+ "fields": ["Proposed business name (3 alternatives)", "Business type", "Business address",
22
+ "Director/owner names and IDs", "Nature of business", "KRA PIN (each director)"],
23
+ "documents": ["National ID or Passport (all directors)", "KRA PIN certificate",
24
+ "Passport photos (2 each)", "Proof of business address",
25
+ "Memorandum & Articles of Association (limited company only)"],
26
+ "steps": ["Search name availability on eCitizen", "Fill online form", "Pay via M-PESA/card",
27
+ "Await SMS confirmation (1-3 days)", "Download Certificate from eCitizen"],
28
+ },
29
+ "business_permit": {
30
+ "name": "Single Business Permit",
31
+ "authority": "County Government",
32
+ "portal": "County eCitizen portal or county offices",
33
+ "cost_kes": {"kiosk": 2000, "retail_shop": 5000, "medium_business": 15000, "large_business": 30000},
34
+ "processing_days": 7,
35
+ "fields": ["Business name and registration number", "Business location (county, ward)",
36
+ "Type of business activity", "Annual turnover estimate",
37
+ "Number of employees", "Premises ownership (own/rent)"],
38
+ "documents": ["Business registration certificate", "KRA PIN certificate",
39
+ "National ID", "Lease agreement (if renting)",
40
+ "Previous year permit (renewal)", "Fire safety certificate (food businesses)"],
41
+ "steps": ["Apply at county offices or county eCitizen portal", "Pay county permit fees",
42
+ "Await inspection (food/health businesses)", "Collect permit"],
43
+ },
44
+ "kra_pin": {
45
+ "name": "KRA Personal Identification Number (PIN)",
46
+ "authority": "Kenya Revenue Authority",
47
+ "portal": "itax.kra.go.ke",
48
+ "cost_kes": 0,
49
+ "processing_days": 1,
50
+ "fields": ["Full legal name (as on ID)", "Date of birth", "ID/Passport number",
51
+ "Physical address", "Email address", "Phone number",
52
+ "Tax obligation type (employee, business, rental, etc.)"],
53
+ "documents": ["National ID or Passport", "Birth certificate (if different from ID name)"],
54
+ "steps": ["Visit itax.kra.go.ke", "Click 'New PIN Registration'",
55
+ "Fill individual taxpayer details", "Upload ID scan",
56
+ "Submit — PIN generated immediately", "Download PIN certificate"],
57
+ },
58
+ "nhif_registration": {
59
+ "name": "NHIF/SHA Registration",
60
+ "authority": "Social Health Authority (SHA)",
61
+ "portal": "sha.go.ke or NHIF offices",
62
+ "cost_kes": {"employed": 500, "self_employed": 500, "voluntary": 500},
63
+ "processing_days": 7,
64
+ "fields": ["Full name", "ID number", "Phone number", "Employer name (if employed)",
65
+ "Dependants (spouse, children under 21)", "Bank account (optional)"],
66
+ "documents": ["National ID", "Passport photo", "Payslip (if employed)",
67
+ "Marriage certificate (for spouse)", "Birth certificates (for children)"],
68
+ "steps": ["Visit sha.go.ke or nearest NHIF office", "Fill SHA Form 1",
69
+ "Submit with documents", "Receive SHA number by SMS (7 days)",
70
+ "Set up monthly contribution (M-PESA Paybill 200222)"],
71
+ },
72
+ "land_title_search": {
73
+ "name": "Land Title Search",
74
+ "authority": "Ministry of Lands — eCitizen",
75
+ "portal": "ecitizen.go.ke/lands",
76
+ "cost_kes": 500,
77
+ "processing_days": 3,
78
+ "fields": ["Title number (LR or IR number)", "County", "Applicant name and ID"],
79
+ "documents": ["National ID of applicant"],
80
+ "steps": ["Log into eCitizen", "Select 'Lands — Search'", "Enter title number",
81
+ "Pay KES 500 via M-PESA", "Download search certificate (3 days)"],
82
+ "note": "Also verify for: charges, caveats, restrictions, ownership history",
83
+ },
84
+ "police_clearance": {
85
+ "name": "Certificate of Good Conduct",
86
+ "authority": "Directorate of Criminal Investigations (DCI)",
87
+ "portal": "ecitizen.go.ke → DCI Services",
88
+ "cost_kes": 1050,
89
+ "processing_days": 30,
90
+ "fields": ["Full name", "ID/Passport number", "Date of birth", "Purpose of certificate"],
91
+ "documents": ["National ID or Passport", "Fingerprinting at DCI offices or Huduma Centres"],
92
+ "steps": ["Apply on eCitizen → DCI → Certificate of Good Conduct",
93
+ "Pay KES 1,050", "Book fingerprinting appointment",
94
+ "Attend fingerprinting at DCI/Huduma Centre",
95
+ "Certificate ready in 30 days — download from eCitizen"],
96
+ },
97
+ }
98
+
99
+ @mcp.tool(name="form_checklist", description="Generate a checklist for a Kenya government form or application. DEMO.")
100
+ def form_checklist(form_type: str, applicant_type: Optional[str] = "individual") -> dict:
101
+ f = form_type.lower().replace(" ", "_").replace("-", "_")
102
+ form = FORMS.get(f)
103
+ if not form:
104
+ available = list(FORMS.keys())
105
+ return {"source": "DEMO", "error": f"Form type '{form_type}' not in database",
106
+ "available_forms": available, "tip": "Try: business_registration, business_permit, kra_pin, nhif_registration, land_title_search, police_clearance"}
107
+ cost = form.get("cost_kes", {})
108
+ if isinstance(cost, dict):
109
+ cost_display = {k: f"KES {v:,}" for k, v in cost.items()}
110
+ else:
111
+ cost_display = f"KES {cost:,}"
112
+ return {"source": f"DEMO — {form['authority']}", "form": form_type,
113
+ "applicant_type": applicant_type, "authority": form["authority"],
114
+ "portal": form["portal"], "cost": cost_display,
115
+ "processing_days": form["processing_days"],
116
+ "required_fields": form["fields"], "required_documents": form["documents"],
117
+ "steps": form["steps"], "note": form.get("note", ""),
118
+ "disclaimer": "Requirements may change. Verify at the official portal before applying."}
119
+
120
+ @mcp.tool(name="form_draft_letter", description="Generate a draft formal letter for common Kenya civic requests. DEMO.")
121
+ def form_draft_letter(letter_type: str, applicant_name: str, details: Optional[str] = None) -> dict:
122
+ TEMPLATES = {
123
+ "introduction_letter": {
124
+ "title": "Letter of Introduction",
125
+ "body": f"""To Whom It May Concern,
126
+
127
+ I, {applicant_name}, hereby introduce myself as a bona fide resident/citizen seeking assistance with [PURPOSE].
128
+
129
+ I hold National ID Number: _______________
130
+
131
+ I kindly request your office to assist me with this matter.
132
+
133
+ Yours faithfully,
134
+ {applicant_name}
135
+ Date: _______________
136
+ Contact: _______________""",
137
+ "use_cases": "Bank account opening, school applications, welfare assistance, community verification",
138
+ },
139
+ "reference_letter": {
140
+ "title": "Reference/Recommendation Letter",
141
+ "body": f"""To Whom It May Concern,
142
+
143
+ I am writing to recommend {applicant_name if applicant_name else '[PERSON NAME]'} for [POSITION/PURPOSE].
144
+
145
+ I have known [him/her/them] for [DURATION] in my capacity as [YOUR TITLE] at [ORGANIZATION].
146
+
147
+ During this time, I have observed [him/her/them] to be [POSITIVE QUALITIES].
148
+
149
+ I recommend [him/her/them] without reservation.
150
+
151
+ [Your Name]
152
+ [Title]
153
+ [Organization]
154
+ [Contact]
155
+ Date: _______________""",
156
+ "use_cases": "Employment, school admission, loan applications, visa applications",
157
+ },
158
+ "complaint_letter": {
159
+ "title": "Formal Complaint Letter",
160
+ "body": f"""[Authority Name]
161
+ [Address]
162
+
163
+ Dear Sir/Madam,
164
+
165
+ Re: Formal Complaint — [SUBJECT]
166
+
167
+ I, {applicant_name}, wish to formally bring to your attention the following matter:
168
+
169
+ [DESCRIPTION OF THE PROBLEM]
170
+
171
+ This has caused me [IMPACT/HARM].
172
+
173
+ I have attempted to resolve this through [PREVIOUS ATTEMPTS] without success.
174
+
175
+ I respectfully request that your office:
176
+ 1. [ACTION REQUESTED 1]
177
+ 2. [ACTION REQUESTED 2]
178
+
179
+ I am available for further information at [CONTACT].
180
+
181
+ Yours faithfully,
182
+ {applicant_name}
183
+ ID: _______________
184
+ Date: _______________""",
185
+ "use_cases": "KPLC complaint, KRA dispute, county services complaint, NHIF complaint",
186
+ },
187
+ "land_inquiry": {
188
+ "title": "Land Inquiry Letter",
189
+ "body": f"""The Land Registrar
190
+ [County] Land Registry
191
+
192
+ Dear Sir/Madam,
193
+
194
+ Re: Land Inquiry — [LR/IR Number]
195
+
196
+ I, {applicant_name}, holding National ID _______________, write to inquire about the parcel of land described as:
197
+
198
+ Title/IR Number: _______________
199
+ Location: _______________
200
+
201
+ I wish to confirm: ownership, any charges or caveats, and the current status of this parcel.
202
+
203
+ Please provide a formal search certificate.
204
+
205
+ Yours faithfully,
206
+ {applicant_name}
207
+ Date: _______________""",
208
+ "use_cases": "Land purchase due diligence, inheritance claims, boundary disputes",
209
+ },
210
+ }
211
+ l = letter_type.lower().replace(" ", "_").replace("-", "_")
212
+ template = TEMPLATES.get(l)
213
+ if not template:
214
+ return {"source": "DEMO", "error": f"Letter type '{letter_type}' not found",
215
+ "available": list(TEMPLATES.keys())}
216
+ body = template["body"]
217
+ if details:
218
+ body = body.replace("[PURPOSE]", details).replace("[SUBJECT]", details)
219
+ return {"source": "DEMO — Kenya formal letter templates", "letter_type": letter_type,
220
+ "title": template["title"], "draft": body, "use_cases": template["use_cases"],
221
+ "disclaimer": "Draft only. Review with the relevant authority before submitting. DEMO."}
222
+
223
+ @mcp.tool(name="form_requirements_check", description="Check if user has all requirements for a Kenya government form. DEMO.")
224
+ def form_requirements_check(form_type: str, user_has: list) -> dict:
225
+ f = form_type.lower().replace(" ", "_").replace("-", "_")
226
+ form = FORMS.get(f)
227
+ if not form:
228
+ return {"source": "DEMO", "error": f"Form '{form_type}' not found",
229
+ "available": list(FORMS.keys())}
230
+ required = form["documents"] + form["fields"]
231
+ user_has_lower = [h.lower() for h in user_has]
232
+ missing = []
233
+ have = []
234
+ for req in required:
235
+ matched = any(word in " ".join(user_has_lower) for word in req.lower().split()[:3])
236
+ if matched:
237
+ have.append(req)
238
+ else:
239
+ missing.append(req)
240
+ ready = len(missing) == 0
241
+ return {"source": f"DEMO — {form['authority']}", "form": form_type,
242
+ "ready_to_apply": ready, "have": have, "missing": missing,
243
+ "completeness_pct": round(len(have) / len(required) * 100, 0),
244
+ "next_step": "Proceed to application" if ready else f"Obtain missing items: {missing[:2]}",
245
+ "portal": form["portal"]}
246
+
247
+ @mcp.tool(name="ecitizen_guide", description="Guide to Kenya eCitizen portal services. DEMO.")
248
+ def ecitizen_guide(service_category: Optional[str] = None) -> dict:
249
+ SERVICES = {
250
+ "business": ["Business name registration (BRS)", "Single Business Permit", "Trade licence",
251
+ "Tourism enterprise registration"],
252
+ "documents": ["National ID application and replacement", "Passport application",
253
+ "Certificate of Good Conduct", "Birth/death/marriage certificates"],
254
+ "lands": ["Land title search", "Land rates clearance", "Valuation rolls",
255
+ "Survey plan requests"],
256
+ "immigration": ["Work permit", "Dependant pass", "Student pass", "Special pass"],
257
+ "tax": ["KRA PIN registration", "iTax filing (links to itax.kra.go.ke)",
258
+ "Tax compliance certificate"],
259
+ "county": ["County-specific services vary. Check your county eCitizen portal."],
260
+ }
261
+ if service_category:
262
+ s = service_category.lower()
263
+ matched = {k: v for k, v in SERVICES.items() if k in s or s in k}
264
+ return {"source": "DEMO — eCitizen Kenya", "category": service_category,
265
+ "services": matched or SERVICES, "portal": "ecitizen.go.ke"}
266
+ return {"source": "DEMO — eCitizen Kenya", "portal": "ecitizen.go.ke",
267
+ "all_services": SERVICES, "payment": "M-PESA, debit/credit card, bank transfer",
268
+ "helpdesk": "0800-221333 (toll-free) | support@ecitizen.go.ke"}
269
+
270
+ @mcp.tool(name="huduma_centre_guide", description="Guide to Kenya Huduma Centre services and locations. DEMO.")
271
+ def huduma_centre_guide(county: Optional[str] = None) -> dict:
272
+ CENTRES = {
273
+ "Nairobi": ["Huduma Centre GPO (Kenyatta Ave)", "Huduma Centre Teleposta (Ngong Rd)",
274
+ "Huduma Centre KICC", "Huduma Centre Athi River"],
275
+ "Mombasa": ["Huduma Centre Mombasa (Treasury Square)"],
276
+ "Kisumu": ["Huduma Centre Kisumu (Swan Centre)"],
277
+ "Nakuru": ["Huduma Centre Nakuru (Gilgil Rd)"],
278
+ "Eldoret": ["Huduma Centre Eldoret (Uganda Rd)"],
279
+ }
280
+ SERVICES_OFFERED = [
281
+ "National ID card (application and replacement)",
282
+ "Passport services", "Birth and death certificates",
283
+ "KRA services", "NHIF registration", "NSSF services",
284
+ "Certificate of Good Conduct (fingerprinting)",
285
+ "Land title search", "Higher Education Loans Board (HELB)",
286
+ "Business name registration", "Immigration services",
287
+ ]
288
+ centres = CENTRES.get(county.title() if county else "Nairobi", CENTRES)
289
+ return {"source": "DEMO — Huduma Kenya", "county": county or "All",
290
+ "centres": centres if county else CENTRES,
291
+ "services": SERVICES_OFFERED,
292
+ "opening_hours": "Monday–Friday: 8:00 AM–5:00 PM",
293
+ "contact": "0800221333 (toll-free) | info@hudumakenya.go.ke",
294
+ "portal": "hudumakenya.go.ke"}
295
+
296
+ @mcp.tool(name="form_timeline_planner", description="Plan timeline for Kenya government processes. DEMO.")
297
+ def form_timeline_planner(processes: list, start_date: Optional[str] = None) -> dict:
298
+ import datetime
299
+ start = start_date or datetime.date.today().isoformat()
300
+ try:
301
+ start_dt = datetime.date.fromisoformat(start)
302
+ except:
303
+ start_dt = datetime.date.today()
304
+ plan = []
305
+ current = start_dt
306
+ total_days = 0
307
+ for process in processes:
308
+ p = process.lower().replace(" ", "_").replace("-", "_")
309
+ form = FORMS.get(p)
310
+ days = form["processing_days"] if form else 7
311
+ name = form["name"] if form else process
312
+ prep_days = 3
313
+ plan.append({
314
+ "process": name, "prep_start": current.isoformat(),
315
+ "apply_by": (current + datetime.timedelta(days=prep_days)).isoformat(),
316
+ "expected_completion": (current + datetime.timedelta(days=prep_days + days)).isoformat(),
317
+ "total_days": prep_days + days,
318
+ })
319
+ current = current + datetime.timedelta(days=prep_days + days + 2)
320
+ total_days += prep_days + days + 2
321
+ end = (start_dt + datetime.timedelta(days=total_days)).isoformat()
322
+ return {"source": "DEMO — Kenya government processing times", "start_date": start,
323
+ "estimated_completion": end, "total_calendar_days": total_days,
324
+ "plan": plan, "tip": "Apply for processes in parallel where possible to save time.",
325
+ "disclaimer": "Processing times are estimates. Actual times vary by office and season."}
@@ -0,0 +1,65 @@
1
+ Metadata-Version: 2.4
2
+ Name: fomu-mcp
3
+ Version: 0.1.0
4
+ Summary: Kenya civic form agent via MCP — checklists, draft letters, requirements check, eCitizen guide, Huduma Centre, timeline planner. 6 tools.
5
+ License: MIT
6
+ Requires-Python: >=3.10
7
+ Description-Content-Type: text/markdown
8
+ Requires-Dist: fastmcp>=0.9
9
+
10
+ # fomu-mcp
11
+
12
+ > Kenya civic form agent via MCP — turns citizen needs into government form checklists, draft applications, and timeline plans.
13
+
14
+ [![PyPI](https://img.shields.io/badge/PyPI-v0.1.0-blue?logo=pypi)](https://pypi.org/project/fomu-mcp/)
15
+ [![License](https://img.shields.io/badge/License-MIT-green)](https://github.com/gabrielmahia/fomu-mcp)
16
+
17
+ *Fomu (Swahili for "form")*
18
+
19
+ ## Why This Exists
20
+
21
+ > *"Form Agent: turns messy user answers into applications, checklists, letters."*
22
+ > — East Africa AI Infrastructure Schematic
23
+
24
+ Kenya's government processes are documented but navigating them requires knowing what to look for.
25
+ fomu-mcp encodes the institutional knowledge: what to bring, where to go, how long it takes, what to pay.
26
+
27
+ ## Install
28
+
29
+ ```bash
30
+ pip install fomu-mcp
31
+ ```
32
+
33
+ ## Tools (6)
34
+
35
+ | Tool | Function |
36
+ |------|----------|
37
+ | `form_checklist` | Complete requirements list for any Kenya government form |
38
+ | `form_draft_letter` | Generate draft formal letters (introduction, reference, complaint, land inquiry) |
39
+ | `form_requirements_check` | Tell user what they have and what they're missing |
40
+ | `ecitizen_guide` | eCitizen portal service directory |
41
+ | `huduma_centre_guide` | Huduma Centre locations and services by county |
42
+ | `form_timeline_planner` | Sequence multiple processes with estimated completion dates |
43
+
44
+ ## Example
45
+
46
+ ```python
47
+ # Check readiness for business registration
48
+ await call_tool("form_requirements_check", {
49
+ "form_type": "business_registration",
50
+ "user_has": ["national ID", "KRA PIN", "passport photo"]
51
+ })
52
+ # Returns: missing items + completeness % + next step
53
+ ```
54
+
55
+ ## Part of AI-KungFU East Africa Coordination Infrastructure
56
+
57
+ Part of the SII Stack — the Form Agent layer in the 7-agent type framework:
58
+ Research · **Form** · Verification · Translation · Financial · Market · Escalation
59
+
60
+ → [sii-stack](https://github.com/gabrielmahia/sii-stack)
61
+ → [The Nairobi Stack](https://gabrielmahia.github.io/nairobi-stack)
62
+
63
+ ## License
64
+
65
+ MIT © Gabriel Mahia | contact@aikungfu.dev
@@ -0,0 +1,10 @@
1
+ README.md
2
+ pyproject.toml
3
+ src/fomu_mcp/__init__.py
4
+ src/fomu_mcp/server.py
5
+ src/fomu_mcp.egg-info/PKG-INFO
6
+ src/fomu_mcp.egg-info/SOURCES.txt
7
+ src/fomu_mcp.egg-info/dependency_links.txt
8
+ src/fomu_mcp.egg-info/entry_points.txt
9
+ src/fomu_mcp.egg-info/requires.txt
10
+ src/fomu_mcp.egg-info/top_level.txt
@@ -0,0 +1,2 @@
1
+ [console_scripts]
2
+ fomu-mcp = fomu_mcp.server:mcp.run
@@ -0,0 +1 @@
1
+ fastmcp>=0.9
@@ -0,0 +1 @@
1
+ fomu_mcp