tavant-docs-mcp 1.0.0
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.
- package/LICENSE +21 -0
- package/assets/bg-agenda-data.jpeg +0 -0
- package/assets/bg-breaker-brain.jpeg +0 -0
- package/assets/bg-breaker-cloud.jpeg +0 -0
- package/assets/bg-breaker-lines.jpeg +0 -0
- package/assets/bg-thankyou.jpeg +0 -0
- package/assets/bg-title-tech.jpeg +0 -0
- package/assets/cr-image1.png +0 -0
- package/assets/decor-cubes.png +0 -0
- package/assets/footer-bar.png +0 -0
- package/assets/tavant-logo-orange.png +0 -0
- package/assets/tavant-logo-small.png +0 -0
- package/assets/tavant-logo-white-sm.png +0 -0
- package/assets/tavant-logo-white.png +0 -0
- package/assets/tavant-template.potx +0 -0
- package/brand.js +21 -0
- package/index.js +172 -0
- package/knowledge/tavant-company.md +181 -0
- package/knowledge/tavant-template.md +61 -0
- package/package.json +32 -0
- package/templates/contract/builders.js +317 -0
- package/templates/contract/register.js +213 -0
- package/templates/contract/sections.js +73 -0
- package/templates/cr/builders.js +286 -0
- package/templates/cr/register.js +189 -0
- package/templates/cr/sections.js +55 -0
- package/templates/msa/builders.js +480 -0
- package/templates/msa/register.js +185 -0
- package/templates/msa/sections.js +86 -0
- package/templates/nda/builders.js +277 -0
- package/templates/nda/register.js +185 -0
- package/templates/nda/sections.js +73 -0
- package/templates/pptx/builders.js +712 -0
- package/templates/pptx/layouts.js +168 -0
- package/templates/pptx/register.js +363 -0
- package/templates/sow/builders.js +294 -0
- package/templates/sow/register.js +183 -0
- package/templates/sow/sections.js +76 -0
- package/test-custom-slide.js +79 -0
- package/test-e2e.js +190 -0
- package/test-msa.js +48 -0
- package/test-nda-cr.js +88 -0
- package/test-pptx.js +93 -0
|
@@ -0,0 +1,185 @@
|
|
|
1
|
+
const { Document, Packer, Header, Footer, Paragraph, TextRun, AlignmentType } = require("docx");
|
|
2
|
+
const { z } = require("zod");
|
|
3
|
+
const { v4: uuidv4 } = require("uuid");
|
|
4
|
+
const path = require("path");
|
|
5
|
+
const fs = require("fs");
|
|
6
|
+
const SECTIONS = require("./sections");
|
|
7
|
+
const sectionBuilders = require("./builders");
|
|
8
|
+
const BRAND = require("../../brand");
|
|
9
|
+
|
|
10
|
+
const msas = new Map();
|
|
11
|
+
|
|
12
|
+
function register(server) {
|
|
13
|
+
server.tool(
|
|
14
|
+
"msa_list_sections",
|
|
15
|
+
"List all available sections for Tavant MSA (Professional Services Agreement) with their descriptions and fields",
|
|
16
|
+
{},
|
|
17
|
+
async () => ({
|
|
18
|
+
content: [{
|
|
19
|
+
type: "text",
|
|
20
|
+
text: JSON.stringify(Object.values(SECTIONS).map((s) => ({
|
|
21
|
+
id: s.id, name: s.name, description: s.description, fields: s.fields,
|
|
22
|
+
})), null, 2),
|
|
23
|
+
}],
|
|
24
|
+
})
|
|
25
|
+
);
|
|
26
|
+
|
|
27
|
+
server.tool(
|
|
28
|
+
"msa_create",
|
|
29
|
+
"Create a new Tavant MSA (Professional Services Agreement). Returns an msa_id. Use msa_add_section to build it, then msa_export to save as .docx",
|
|
30
|
+
{
|
|
31
|
+
customer_name: z.string().optional().describe("Customer/client company name"),
|
|
32
|
+
effective_date: z.string().optional().describe("Agreement effective date"),
|
|
33
|
+
},
|
|
34
|
+
async ({ customer_name, effective_date }) => {
|
|
35
|
+
const id = uuidv4();
|
|
36
|
+
msas.set(id, {
|
|
37
|
+
customer_name: customer_name || "[Customer Name]",
|
|
38
|
+
effective_date: effective_date || "[Date]",
|
|
39
|
+
sections: [],
|
|
40
|
+
});
|
|
41
|
+
return {
|
|
42
|
+
content: [{
|
|
43
|
+
type: "text",
|
|
44
|
+
text: JSON.stringify({
|
|
45
|
+
msa_id: id,
|
|
46
|
+
customer_name: msas.get(id).customer_name,
|
|
47
|
+
message: "MSA created. Use msa_add_section to add sections, then msa_export to save.",
|
|
48
|
+
}),
|
|
49
|
+
}],
|
|
50
|
+
};
|
|
51
|
+
}
|
|
52
|
+
);
|
|
53
|
+
|
|
54
|
+
server.tool(
|
|
55
|
+
"msa_add_section",
|
|
56
|
+
"Add a section to an MSA document. Most sections use standard Tavant legal language with no required fields.",
|
|
57
|
+
{
|
|
58
|
+
msa_id: z.string().describe("The MSA ID from msa_create"),
|
|
59
|
+
section: z.string().describe(
|
|
60
|
+
"Section ID: cover_page, preamble, definitions, professional_services, acceptance_and_fees, ownership, confidentiality, warranties, indemnification, limitation_of_liability, term_and_termination, general_provisions, signatures"
|
|
61
|
+
),
|
|
62
|
+
data: z.record(z.any()).optional().describe(
|
|
63
|
+
"Section content data. Most sections have no required fields (standard legal text). Only cover_page, preamble, and signatures accept custom data. Use msa_list_sections to see fields."
|
|
64
|
+
),
|
|
65
|
+
},
|
|
66
|
+
async ({ msa_id, section, data }) => {
|
|
67
|
+
const msa = msas.get(msa_id);
|
|
68
|
+
if (!msa) return { content: [{ type: "text", text: "Error: MSA not found." }], isError: true };
|
|
69
|
+
const builder = sectionBuilders[section];
|
|
70
|
+
if (!builder) {
|
|
71
|
+
return {
|
|
72
|
+
content: [{ type: "text", text: `Error: Unknown section "${section}". Available: ${Object.keys(SECTIONS).join(", ")}` }],
|
|
73
|
+
isError: true,
|
|
74
|
+
};
|
|
75
|
+
}
|
|
76
|
+
msa.sections.push({ section, data: data || {} });
|
|
77
|
+
return {
|
|
78
|
+
content: [{
|
|
79
|
+
type: "text",
|
|
80
|
+
text: JSON.stringify({ message: `Section added: ${section}`, total_sections: msa.sections.length }),
|
|
81
|
+
}],
|
|
82
|
+
};
|
|
83
|
+
}
|
|
84
|
+
);
|
|
85
|
+
|
|
86
|
+
server.tool(
|
|
87
|
+
"msa_export",
|
|
88
|
+
"Export MSA (Professional Services Agreement) as a .docx Word document",
|
|
89
|
+
{
|
|
90
|
+
msa_id: z.string().describe("The MSA ID"),
|
|
91
|
+
output_path: z.string().optional().describe("Output file path. Defaults to ./output/MSA_<customer>.docx"),
|
|
92
|
+
},
|
|
93
|
+
async ({ msa_id, output_path }) => {
|
|
94
|
+
const msa = msas.get(msa_id);
|
|
95
|
+
if (!msa) return { content: [{ type: "text", text: "Error: MSA not found." }], isError: true };
|
|
96
|
+
|
|
97
|
+
const children = [];
|
|
98
|
+
for (const { section, data } of msa.sections) {
|
|
99
|
+
const builder = sectionBuilders[section];
|
|
100
|
+
if (builder) {
|
|
101
|
+
const paragraphs = builder({
|
|
102
|
+
...data,
|
|
103
|
+
customer_name: data.customer_name || msa.customer_name,
|
|
104
|
+
effective_date: data.effective_date || msa.effective_date,
|
|
105
|
+
});
|
|
106
|
+
children.push(...paragraphs);
|
|
107
|
+
}
|
|
108
|
+
}
|
|
109
|
+
|
|
110
|
+
const doc = new Document({
|
|
111
|
+
creator: "Tavant",
|
|
112
|
+
title: `Professional Services Agreement - ${msa.customer_name}`,
|
|
113
|
+
description: `MSA between Tavant Technologies, Inc. and ${msa.customer_name}`,
|
|
114
|
+
styles: {
|
|
115
|
+
default: {
|
|
116
|
+
document: {
|
|
117
|
+
run: { font: BRAND.font, size: 22, color: "333333" },
|
|
118
|
+
},
|
|
119
|
+
},
|
|
120
|
+
},
|
|
121
|
+
sections: [{
|
|
122
|
+
properties: {
|
|
123
|
+
page: { margin: { top: 1440, right: 1440, bottom: 1440, left: 1440 } },
|
|
124
|
+
},
|
|
125
|
+
headers: {
|
|
126
|
+
default: new Header({
|
|
127
|
+
children: [
|
|
128
|
+
new Paragraph({
|
|
129
|
+
alignment: AlignmentType.RIGHT,
|
|
130
|
+
children: [
|
|
131
|
+
new TextRun({ text: "Tavant Technologies, Inc. Confidential", font: BRAND.font, size: 16, color: "999999", italics: true }),
|
|
132
|
+
],
|
|
133
|
+
}),
|
|
134
|
+
],
|
|
135
|
+
}),
|
|
136
|
+
},
|
|
137
|
+
footers: {
|
|
138
|
+
default: new Footer({
|
|
139
|
+
children: [
|
|
140
|
+
new Paragraph({
|
|
141
|
+
alignment: AlignmentType.CENTER,
|
|
142
|
+
children: [
|
|
143
|
+
new TextRun({
|
|
144
|
+
text: `Professional Services Agreement | ${msa.customer_name} | Tavant Technologies, Inc.`,
|
|
145
|
+
font: BRAND.font, size: 16, color: "999999",
|
|
146
|
+
}),
|
|
147
|
+
],
|
|
148
|
+
}),
|
|
149
|
+
],
|
|
150
|
+
}),
|
|
151
|
+
},
|
|
152
|
+
children,
|
|
153
|
+
}],
|
|
154
|
+
});
|
|
155
|
+
|
|
156
|
+
const buffer = await Packer.toBuffer(doc);
|
|
157
|
+
const sanitized = (msa.customer_name || "MSA").replace(/[^a-zA-Z0-9_-]/g, "_").substring(0, 50);
|
|
158
|
+
const defaultDir = path.join(process.cwd(), "output");
|
|
159
|
+
if (!fs.existsSync(defaultDir)) fs.mkdirSync(defaultDir, { recursive: true });
|
|
160
|
+
const filePath = output_path || path.join(defaultDir, `MSA_${sanitized}.docx`);
|
|
161
|
+
const dir = path.dirname(filePath);
|
|
162
|
+
if (!fs.existsSync(dir)) fs.mkdirSync(dir, { recursive: true });
|
|
163
|
+
fs.writeFileSync(filePath, buffer);
|
|
164
|
+
|
|
165
|
+
return {
|
|
166
|
+
content: [{
|
|
167
|
+
type: "text",
|
|
168
|
+
text: JSON.stringify({ message: "MSA exported", file_path: filePath, total_sections: msa.sections.length }),
|
|
169
|
+
}],
|
|
170
|
+
};
|
|
171
|
+
}
|
|
172
|
+
);
|
|
173
|
+
|
|
174
|
+
server.tool(
|
|
175
|
+
"msa_delete",
|
|
176
|
+
"Delete an MSA from memory",
|
|
177
|
+
{ msa_id: z.string().describe("The MSA ID") },
|
|
178
|
+
async ({ msa_id }) => {
|
|
179
|
+
if (msas.delete(msa_id)) return { content: [{ type: "text", text: "MSA deleted." }] };
|
|
180
|
+
return { content: [{ type: "text", text: "Not found." }], isError: true };
|
|
181
|
+
}
|
|
182
|
+
);
|
|
183
|
+
}
|
|
184
|
+
|
|
185
|
+
module.exports = { register };
|
|
@@ -0,0 +1,86 @@
|
|
|
1
|
+
// MSA (Professional Services Agreement) template section definitions
|
|
2
|
+
// Extracted from Tavant MSA-Professional Services Agreement Template
|
|
3
|
+
// 12 sections matching the real corporate MSA structure
|
|
4
|
+
|
|
5
|
+
const SECTIONS = {
|
|
6
|
+
cover_page: {
|
|
7
|
+
id: "cover_page",
|
|
8
|
+
name: "Cover Page",
|
|
9
|
+
description: "MSA title page with Tavant branding, customer name, and effective date",
|
|
10
|
+
fields: ["customer_name", "effective_date"],
|
|
11
|
+
},
|
|
12
|
+
preamble: {
|
|
13
|
+
id: "preamble",
|
|
14
|
+
name: "Preamble",
|
|
15
|
+
description: "Introduction identifying parties (Tavant Technologies Inc. and Customer), addresses, effective date, and governing purpose",
|
|
16
|
+
fields: ["customer_name", "customer_address", "effective_date"],
|
|
17
|
+
},
|
|
18
|
+
definitions: {
|
|
19
|
+
id: "definitions",
|
|
20
|
+
name: "1. Definitions",
|
|
21
|
+
description: "Defined terms: Affiliate, Acceptance, Change Request, Confidential Information, Content, Documentation, IP Rights, Laws, Professional Services, SOW, Work Product, etc.",
|
|
22
|
+
fields: [],
|
|
23
|
+
},
|
|
24
|
+
professional_services: {
|
|
25
|
+
id: "professional_services",
|
|
26
|
+
name: "2. Professional Services",
|
|
27
|
+
description: "Services scope, dates, Tavant personnel, independent contractor status, customer obligations, change order process",
|
|
28
|
+
fields: [],
|
|
29
|
+
},
|
|
30
|
+
acceptance_and_fees: {
|
|
31
|
+
id: "acceptance_and_fees",
|
|
32
|
+
name: "3. Acceptance and Fees",
|
|
33
|
+
description: "Review/acceptance (20-day deemed acceptance), T&M fees, fixed rate fees, expense reimbursement, COLA (max 5%), personnel promotion, late fees (1.5%/month)",
|
|
34
|
+
fields: [],
|
|
35
|
+
},
|
|
36
|
+
ownership: {
|
|
37
|
+
id: "ownership",
|
|
38
|
+
name: "4. Ownership",
|
|
39
|
+
description: "Work Product ownership (Customer owns), Background IP (Tavant owns, grants perpetual license), Residuals, Third Party Materials, proprietary notices",
|
|
40
|
+
fields: [],
|
|
41
|
+
},
|
|
42
|
+
confidentiality: {
|
|
43
|
+
id: "confidentiality",
|
|
44
|
+
name: "5. Confidential Information and Data Protection",
|
|
45
|
+
description: "Nondisclosure obligations, exceptions, PII/privacy, confidentiality of agreement terms, data residency (Azure), use restrictions, audit rights (annual), data deletion (60 days)",
|
|
46
|
+
fields: [],
|
|
47
|
+
},
|
|
48
|
+
warranties: {
|
|
49
|
+
id: "warranties",
|
|
50
|
+
name: "6. Warranties",
|
|
51
|
+
description: "Warranty disclaimer — AS IS, no implied warranties of merchantability/fitness/noninfringement",
|
|
52
|
+
fields: [],
|
|
53
|
+
},
|
|
54
|
+
indemnification: {
|
|
55
|
+
id: "indemnification",
|
|
56
|
+
name: "7. Indemnification and Insurance",
|
|
57
|
+
description: "Mutual indemnification for IP infringement, Tavant options (modify/replace/license/terminate), Customer indemnification, insurance requirements (Workers Comp, CGL, Auto, Umbrella)",
|
|
58
|
+
fields: [],
|
|
59
|
+
},
|
|
60
|
+
limitation_of_liability: {
|
|
61
|
+
id: "limitation_of_liability",
|
|
62
|
+
name: "8. Limitation of Liability",
|
|
63
|
+
description: "No special/incidental/consequential damages, liability cap at 6 months fees, excluded claims at 2x cap",
|
|
64
|
+
fields: [],
|
|
65
|
+
},
|
|
66
|
+
term_and_termination: {
|
|
67
|
+
id: "term_and_termination",
|
|
68
|
+
name: "9. Term and Termination",
|
|
69
|
+
description: "Effective until terminated, 30-day termination notice, material breach cure period (30 days), obligations upon termination (15-day payment, return confidential info, transition support)",
|
|
70
|
+
fields: [],
|
|
71
|
+
},
|
|
72
|
+
general_provisions: {
|
|
73
|
+
id: "general_provisions",
|
|
74
|
+
name: "10. General Provisions",
|
|
75
|
+
description: "Governing law (California/Santa Clara County), compliance, assignment, relationship of parties, non-solicitation (1 year), waiver, survival (Sections 1,7,8,10), force majeure, notices, entire agreement, severability, no publicity",
|
|
76
|
+
fields: [],
|
|
77
|
+
},
|
|
78
|
+
signatures: {
|
|
79
|
+
id: "signatures",
|
|
80
|
+
name: "Signatures",
|
|
81
|
+
description: "Execution block for Tavant Technologies Inc. and Customer with By, Name, Title, Date fields",
|
|
82
|
+
fields: ["customer_name", "customer_signatory", "customer_title", "tavant_signatory", "tavant_title"],
|
|
83
|
+
},
|
|
84
|
+
};
|
|
85
|
+
|
|
86
|
+
module.exports = SECTIONS;
|
|
@@ -0,0 +1,277 @@
|
|
|
1
|
+
const {
|
|
2
|
+
Document, Packer, Paragraph, TextRun, HeadingLevel,
|
|
3
|
+
AlignmentType, Table, TableRow, TableCell,
|
|
4
|
+
WidthType, Header, Footer,
|
|
5
|
+
} = require("docx");
|
|
6
|
+
const BRAND = require("../../brand");
|
|
7
|
+
|
|
8
|
+
const FONT = BRAND.font;
|
|
9
|
+
const ORANGE = BRAND.colors.orange;
|
|
10
|
+
|
|
11
|
+
// ─── Reusable helpers ──────────────────────────────────────────────────
|
|
12
|
+
function heading(text, level = HeadingLevel.HEADING_1) {
|
|
13
|
+
return new Paragraph({
|
|
14
|
+
heading: level,
|
|
15
|
+
spacing: { before: 300, after: 150 },
|
|
16
|
+
children: [
|
|
17
|
+
new TextRun({ text, bold: true, font: FONT, size: level === HeadingLevel.HEADING_1 ? 28 : 24, color: ORANGE }),
|
|
18
|
+
],
|
|
19
|
+
});
|
|
20
|
+
}
|
|
21
|
+
|
|
22
|
+
function bodyText(text, options = {}) {
|
|
23
|
+
return new Paragraph({
|
|
24
|
+
spacing: { after: 120 },
|
|
25
|
+
indent: options.indent ? { left: options.indent } : undefined,
|
|
26
|
+
children: [
|
|
27
|
+
new TextRun({ text, font: FONT, size: 22, color: "333333", ...options }),
|
|
28
|
+
],
|
|
29
|
+
});
|
|
30
|
+
}
|
|
31
|
+
|
|
32
|
+
function numberedClause(number, text) {
|
|
33
|
+
return new Paragraph({
|
|
34
|
+
spacing: { after: 80 },
|
|
35
|
+
children: [
|
|
36
|
+
new TextRun({ text: `(${number}) `, font: FONT, size: 22, color: "333333" }),
|
|
37
|
+
new TextRun({ text, font: FONT, size: 22, color: "333333" }),
|
|
38
|
+
],
|
|
39
|
+
});
|
|
40
|
+
}
|
|
41
|
+
|
|
42
|
+
function emptyLine() {
|
|
43
|
+
return new Paragraph({ spacing: { after: 100 }, children: [] });
|
|
44
|
+
}
|
|
45
|
+
|
|
46
|
+
// ─── Section builders ──────────────────────────────────────────────────
|
|
47
|
+
const sectionBuilders = {
|
|
48
|
+
cover_page(data) {
|
|
49
|
+
return [
|
|
50
|
+
emptyLine(), emptyLine(), emptyLine(),
|
|
51
|
+
new Paragraph({
|
|
52
|
+
alignment: AlignmentType.CENTER,
|
|
53
|
+
spacing: { after: 200 },
|
|
54
|
+
children: [
|
|
55
|
+
new TextRun({ text: BRAND.company.toUpperCase(), bold: true, font: FONT, size: 48, color: ORANGE }),
|
|
56
|
+
],
|
|
57
|
+
}),
|
|
58
|
+
emptyLine(),
|
|
59
|
+
new Paragraph({
|
|
60
|
+
alignment: AlignmentType.CENTER,
|
|
61
|
+
spacing: { after: 100 },
|
|
62
|
+
children: [
|
|
63
|
+
new TextRun({ text: data.nda_title || "MUTUAL NON-DISCLOSURE AGREEMENT", bold: true, font: FONT, size: 36, color: "333333" }),
|
|
64
|
+
],
|
|
65
|
+
}),
|
|
66
|
+
emptyLine(),
|
|
67
|
+
new Paragraph({
|
|
68
|
+
alignment: AlignmentType.CENTER,
|
|
69
|
+
spacing: { after: 80 },
|
|
70
|
+
children: [
|
|
71
|
+
new TextRun({ text: `Between Tavant Technologies, Inc. and ${data.company_name || "[Company Name]"}`, font: FONT, size: 24, color: "666666" }),
|
|
72
|
+
],
|
|
73
|
+
}),
|
|
74
|
+
new Paragraph({
|
|
75
|
+
alignment: AlignmentType.CENTER,
|
|
76
|
+
spacing: { after: 80 },
|
|
77
|
+
children: [
|
|
78
|
+
new TextRun({ text: `Effective Date: ${data.effective_date || "[Date]"}`, font: FONT, size: 22, color: "666666" }),
|
|
79
|
+
],
|
|
80
|
+
}),
|
|
81
|
+
emptyLine(),
|
|
82
|
+
new Paragraph({
|
|
83
|
+
alignment: AlignmentType.CENTER,
|
|
84
|
+
children: [
|
|
85
|
+
new TextRun({ text: BRAND.footer, font: FONT, size: 18, color: "999999", italics: true }),
|
|
86
|
+
],
|
|
87
|
+
}),
|
|
88
|
+
];
|
|
89
|
+
},
|
|
90
|
+
|
|
91
|
+
preamble(data) {
|
|
92
|
+
return [
|
|
93
|
+
heading("MUTUAL NON-DISCLOSURE AGREEMENT"),
|
|
94
|
+
bodyText(
|
|
95
|
+
`This Mutual Non-Disclosure Agreement is made and entered into as of ${data.effective_date || "[Date]"} by and between Tavant Technologies, Inc., with an office at 3945 Freedom Circle, Suite 600, Santa Clara, CA 95054 ("Tavant"), and ${data.company_name || "[Company Name]"}, with an office at ${data.company_address || "[Company Address]"} (the "Company").`
|
|
96
|
+
),
|
|
97
|
+
emptyLine(),
|
|
98
|
+
bodyText(
|
|
99
|
+
`Tavant and the Company may be discussing or evaluating possible business transactions (the "Business Transactions"). In connection with these discussions, each party may disclose or has disclosed, certain Proprietary Information (as hereinafter defined), which it desires to be used only for the limited purpose for which disclosed. The parties also wish to agree as to the making of public statements or reports regarding the Business Transactions.`
|
|
100
|
+
),
|
|
101
|
+
emptyLine(),
|
|
102
|
+
bodyText(
|
|
103
|
+
`The party receiving Proprietary Information is referred to herein as "Recipient" and the party disclosing Proprietary Information is referred to herein as "Discloser".`
|
|
104
|
+
),
|
|
105
|
+
];
|
|
106
|
+
},
|
|
107
|
+
|
|
108
|
+
proprietary_information(data) {
|
|
109
|
+
const paras = [
|
|
110
|
+
heading("1. Proprietary Information"),
|
|
111
|
+
bodyText(
|
|
112
|
+
`For purposes of this Agreement, "Proprietary Information" of a party shall mean:`
|
|
113
|
+
),
|
|
114
|
+
numberedClause("i", "information disclosed by such party relating to product development strategy and activity, marketing strategy, corporate assessments and strategic plans, pricing, financial and statistical information, accounting information, identity of suppliers, software, systems, processes, formulae, inventions, discoveries, policies, guidelines, procedures, practices, disputes or litigation,"),
|
|
115
|
+
numberedClause("ii", "confidential, proprietary or trade secret information orally disclosed by such party and identified as such on the date of its first disclosure, with a written summary thereof provided to Recipient within thirty (30) days of disclosure,"),
|
|
116
|
+
numberedClause("iii", "confidential, proprietary or trade secret information disclosed by such party that is clearly and conspicuously identified in writing as such at the time of its first disclosure,"),
|
|
117
|
+
numberedClause("iv", "confidential, proprietary or trade secret information disclosed by such party, which a reasonable person employed in the services industry would recognize as such,"),
|
|
118
|
+
numberedClause("v", "information disclosed by such party relating to employees, contractors or customers which, if released, would cause an unlawful invasion of privacy, and"),
|
|
119
|
+
numberedClause("vi", "any compilation or summary of information or data that contains or is based on Proprietary Information."),
|
|
120
|
+
emptyLine(),
|
|
121
|
+
bodyText(
|
|
122
|
+
`For purposes of this Agreement, and without limiting the generality of the foregoing, the parties acknowledge and agree that (A) all Proprietary Information disclosed by a party shall be deemed to be the Proprietary Information of such party, including, but not limited to, third-party confidential, proprietary or trade secret information that such party is obligated to protect, and (B) information shall be deemed to be disclosed by a party if such information is disclosed by any of its partners, affiliates, officers, employees, directors, contractors, agents or representatives or is otherwise disclosed on behalf of such party.`
|
|
123
|
+
),
|
|
124
|
+
];
|
|
125
|
+
return paras;
|
|
126
|
+
},
|
|
127
|
+
|
|
128
|
+
protection() {
|
|
129
|
+
return [
|
|
130
|
+
heading("2. Protection"),
|
|
131
|
+
bodyText("Recipient agrees to:"),
|
|
132
|
+
numberedClause("i", "receive Proprietary Information disclosed hereunder in confidence,"),
|
|
133
|
+
numberedClause("ii", "use reasonable efforts to maintain the confidentiality of such Proprietary Information and not disclose such Proprietary Information to third parties (except for Recipient's partners, affiliates, representatives, agents and contractors who have a need to know, are under a duty of non-disclosure with respect to such information, and are acting for the sole benefit of Recipient), which efforts shall accord such Proprietary Information at least the same level of protection against unauthorized use and disclosure that Recipient customarily accords to its own information of a similar nature,"),
|
|
134
|
+
numberedClause("iii", "use or permit the use of such Proprietary Information solely in accordance with the terms of this Agreement for the discussion and/or evaluation of the Business Transactions, and"),
|
|
135
|
+
numberedClause("iv", "promptly notify Discloser in writing of any actual or suspected loss or unauthorized use, disclosure or access of Discloser's Proprietary Information of which it becomes aware, and take all steps reasonably requested by Discloser to limit, stop or otherwise prevent such loss or unauthorized use, disclosure or access."),
|
|
136
|
+
];
|
|
137
|
+
},
|
|
138
|
+
|
|
139
|
+
exclusions() {
|
|
140
|
+
return [
|
|
141
|
+
heading("3. Exclusions"),
|
|
142
|
+
bodyText("The restrictions on use and disclosure set forth above shall not apply when and to the extent that the Proprietary Information:"),
|
|
143
|
+
numberedClause("i", "is or becomes generally available to the public;"),
|
|
144
|
+
numberedClause("ii", "was previously rightfully known to Recipient free of any obligation to keep it confidential;"),
|
|
145
|
+
numberedClause("iii", "is subsequently disclosed to Recipient by a third party who may rightfully transfer and disclose such information without restriction and free of any obligation to keep it confidential;"),
|
|
146
|
+
numberedClause("iv", "is independently developed by Recipient without reference to Discloser's Proprietary Information, or"),
|
|
147
|
+
numberedClause("v", "is required to be disclosed by Recipient by applicable law, provided that Recipient uses all reasonable efforts to provide Discloser with at least ten (10) days' prior notice of such disclosure and Recipient discloses only that portion of the Proprietary Information that is legally required to be furnished pursuant to the opinion of legal counsel of Recipient."),
|
|
148
|
+
];
|
|
149
|
+
},
|
|
150
|
+
|
|
151
|
+
rights() {
|
|
152
|
+
return [
|
|
153
|
+
heading("4. Rights"),
|
|
154
|
+
bodyText(
|
|
155
|
+
`All Proprietary Information disclosed by one party to the other in connection with this Agreement shall be deemed to be the property of Discloser or the appropriate third-party owner, as the case may be. Except as Recipient reasonably requires, to accomplish the purposes provided herein, Recipient shall not reproduce such Proprietary Information, in whole or in part, without written authorization of Discloser.`
|
|
156
|
+
),
|
|
157
|
+
emptyLine(),
|
|
158
|
+
bodyText(
|
|
159
|
+
`At the conclusion of the discussions between the parties or within five (5) business days of Discloser's earlier request, Recipient shall cease use of all Proprietary Information received hereunder and shall, pursuant to Discloser's instructions, and at Discloser's sole discretion: (i) return it to Discloser; and/or, (ii) destroy all tangible or retrievable materials embodying such Proprietary Information.`
|
|
160
|
+
),
|
|
161
|
+
emptyLine(),
|
|
162
|
+
bodyText(
|
|
163
|
+
`If Discloser elects to require Recipient to destroy rather than return Proprietary Information, Recipient will provide Discloser, at Discloser's request, with an affidavit affirming that such Proprietary Information has been permanently and completely destroyed. However, machine-readable archival copies of Proprietary Information need only be destroyed in due course and Recipient's auditors or legal counsel may retain one (1) copy of Proprietary Information for the sole purpose of establishing what Proprietary Information has been received.`
|
|
164
|
+
),
|
|
165
|
+
emptyLine(),
|
|
166
|
+
bodyText(
|
|
167
|
+
`Except as expressly provided herein, Discloser grants no license under any copyright, patent, trademark, trade secret or other intellectual property right by disclosure of Proprietary Information. As to any Proprietary Information that the Discloser maintains as a trade secret, the Recipient's obligations under Section 2 will remain in effect for as long such Proprietary Information remains a trade secret, and such obligations will survive termination or expiration of this Agreement.`
|
|
168
|
+
),
|
|
169
|
+
];
|
|
170
|
+
},
|
|
171
|
+
|
|
172
|
+
legends() {
|
|
173
|
+
return [
|
|
174
|
+
heading("5. Legends"),
|
|
175
|
+
bodyText(
|
|
176
|
+
`Each party agrees that it shall abide by and reproduce and include any restrictive legend or proprietary rights notice that appears in or on any Proprietary Information of the other party (or any third-party owner) that it is authorized to reproduce. Each party also agrees that it shall not remove, alter, cover or distort any trademark, trade name, copyright or other proprietary rights notices, legends, symbols or labels appearing on or in any Proprietary Information of the other party (or any third-party owner).`
|
|
177
|
+
),
|
|
178
|
+
];
|
|
179
|
+
},
|
|
180
|
+
|
|
181
|
+
general_terms(data) {
|
|
182
|
+
return [
|
|
183
|
+
heading("6. General Terms"),
|
|
184
|
+
emptyLine(),
|
|
185
|
+
bodyText("6.1 Independent Development and Marketing", { bold: true }),
|
|
186
|
+
bodyText(
|
|
187
|
+
`Discloser understands that Recipient or third parties may have performed substantial independent development relating to Discloser's Proprietary Information. Neither this Agreement nor receipt of Proprietary Information hereunder shall limit either party's independent development and marketing of products or systems involving technology or ideas similar to those disclosed nor will this Agreement or receipt of Proprietary Information hereunder prevent either party from undertaking similar efforts or discussions with third parties, including competitors of the other party.`
|
|
188
|
+
),
|
|
189
|
+
emptyLine(),
|
|
190
|
+
bodyText("6.2 No Warranties", { bold: true }),
|
|
191
|
+
bodyText(
|
|
192
|
+
`DISCLOSER PROVIDES INFORMATION SOLELY ON AN "AS IS" BASIS, WITHOUT WARRANTIES OF ANY KIND or duty to update or correct. Each party understands that portions of Proprietary Information may relate to products or services that are under development or planned for development by Discloser or a third party. Discloser does not warrant or represent that it will or will not introduce any product or service to which Proprietary Information disclosed herein is related.`
|
|
193
|
+
),
|
|
194
|
+
emptyLine(),
|
|
195
|
+
bodyText("6.3 Limited Obligations", { bold: true }),
|
|
196
|
+
bodyText(
|
|
197
|
+
`Other than the obligations set forth herein, neither party shall have any further obligations to the other unless and until a definitive written agreement is executed. Neither party will be required to negotiate nor enter into any other agreements or arrangements with the other party, whether or not related to the Business Transactions. This Agreement does not create any agency or partnership relationship.`
|
|
198
|
+
),
|
|
199
|
+
emptyLine(),
|
|
200
|
+
bodyText("6.4 Public Statements; Use of Name", { bold: true }),
|
|
201
|
+
bodyText(
|
|
202
|
+
`Neither party shall make, deliver or publish any public statements or descriptions of the Business Transactions (including statements that a Business Transaction is being discussed) without the prior written consent of the other party. Either party may provide disclosures as required by law. Neither party shall use the name or marks of the other for advertising or any other purposes without the prior written approval of the other party.`
|
|
203
|
+
),
|
|
204
|
+
emptyLine(),
|
|
205
|
+
bodyText("6.5 No Assignment", { bold: true }),
|
|
206
|
+
bodyText(
|
|
207
|
+
`Neither this Agreement nor any rights or obligations hereunder shall be assignable, delegable or otherwise transferable in whole or in part by either party.`
|
|
208
|
+
),
|
|
209
|
+
emptyLine(),
|
|
210
|
+
bodyText("6.6 Governing Law; Severability", { bold: true }),
|
|
211
|
+
bodyText(
|
|
212
|
+
`This Agreement shall be governed by the laws of ${data.governing_law || "California"}, exclusive of its conflict of laws principles. If any provision of this Agreement is held to be void or unenforceable, in whole or in part, the other provisions of this Agreement shall continue to be valid and the parties shall replace the void or unenforceable provision with one that is valid and enforceable and most nearly approximates their original intentions.`
|
|
213
|
+
),
|
|
214
|
+
emptyLine(),
|
|
215
|
+
bodyText("6.7 No Solicitation", { bold: true }),
|
|
216
|
+
bodyText(
|
|
217
|
+
`Each party shall not, without the other's prior written consent solicit and/or hire (on a consulting basis or otherwise) any employee, contractor or agent (which does not include professional advisors such as attorneys, accountants and the like) of the other party until after the expiration of twelve months from the termination of such person's relationship with such party.`
|
|
218
|
+
),
|
|
219
|
+
emptyLine(),
|
|
220
|
+
bodyText("6.8 Notices", { bold: true }),
|
|
221
|
+
bodyText(
|
|
222
|
+
`All notices, requests, demands, and other communications (other than routine operational communications) required or permitted hereunder shall be in writing and shall be deemed to have been received by a party (i) when actually received in the case of hand delivery against a signed receipt, (ii) two (2) business days after being given to a reputable overnight courier, or (iii) upon receipt when mailed by first class mail, postage prepaid, and addressed to such party at its address set forth herein.`
|
|
223
|
+
),
|
|
224
|
+
];
|
|
225
|
+
},
|
|
226
|
+
|
|
227
|
+
term(data) {
|
|
228
|
+
const years = data.term_years || "5";
|
|
229
|
+
const noticeDays = data.notice_days || "30";
|
|
230
|
+
return [
|
|
231
|
+
heading("7. Term"),
|
|
232
|
+
bodyText(
|
|
233
|
+
`This Agreement shall remain in full force and effect for a period of ${years} (${years === "5" ? "five" : years}) years from the Effective Date unless sooner terminated at any time by either party by giving at least ${noticeDays} (${noticeDays === "30" ? "thirty" : noticeDays}) days prior written notice to the other party.`
|
|
234
|
+
),
|
|
235
|
+
emptyLine(),
|
|
236
|
+
bodyText(
|
|
237
|
+
`Notwithstanding the foregoing, the Receiving Party's duties and obligations of security and confidentiality with respect to Confidential Information shall survive the termination or expiration of this Agreement and remain in effect indefinitely.`
|
|
238
|
+
),
|
|
239
|
+
];
|
|
240
|
+
},
|
|
241
|
+
|
|
242
|
+
entire_agreement() {
|
|
243
|
+
return [
|
|
244
|
+
heading("8. Entire Agreement"),
|
|
245
|
+
bodyText(
|
|
246
|
+
`This instrument expresses the entire understanding of the parties, and supersedes all prior oral or written agreements, commitments and understandings, with respect to the subject matter hereof. This Agreement may be executed in one or more counterparts, each of which when so executed and delivered shall be an original and all of which together shall constitute one and the same instrument. Facsimile signatures are deemed to be equivalent to original signatures for purposes of this Agreement.`
|
|
247
|
+
),
|
|
248
|
+
emptyLine(),
|
|
249
|
+
bodyText(
|
|
250
|
+
`No modification, amendment or waiver of any term or condition of this Agreement shall be binding upon a party unless it is in writing and is executed by the party against whom such modification, amendment or waiver is sought to be enforced.`
|
|
251
|
+
),
|
|
252
|
+
];
|
|
253
|
+
},
|
|
254
|
+
|
|
255
|
+
signatures(data) {
|
|
256
|
+
return [
|
|
257
|
+
heading("SIGNATURES"),
|
|
258
|
+
bodyText("IN WITNESS WHEREOF, the parties hereto have executed this Agreement, which shall be effective as of the date first written above."),
|
|
259
|
+
emptyLine(), emptyLine(),
|
|
260
|
+
bodyText("Tavant Technologies, Inc.", { bold: true }),
|
|
261
|
+
emptyLine(),
|
|
262
|
+
bodyText("By: _________________________________"),
|
|
263
|
+
bodyText(`Name: ${data.tavant_signatory || "________________________"}`),
|
|
264
|
+
bodyText(`Title: ${data.tavant_title || "________________________"}`),
|
|
265
|
+
bodyText("Address: 3945 Freedom Circle, Suite 600, Santa Clara, CA 95054"),
|
|
266
|
+
emptyLine(), emptyLine(),
|
|
267
|
+
bodyText(data.company_name || "[Company Name]", { bold: true }),
|
|
268
|
+
emptyLine(),
|
|
269
|
+
bodyText("By: _________________________________"),
|
|
270
|
+
bodyText(`Name: ${data.company_signatory || "________________________"}`),
|
|
271
|
+
bodyText(`Title: ${data.company_title || "________________________"}`),
|
|
272
|
+
bodyText(`Address: ${data.company_address || "________________________"}`),
|
|
273
|
+
];
|
|
274
|
+
},
|
|
275
|
+
};
|
|
276
|
+
|
|
277
|
+
module.exports = sectionBuilders;
|