@atlaskit/ads-mcp 0.1.8 → 0.2.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/CHANGELOG.md CHANGED
@@ -1,5 +1,19 @@
1
1
  # @atlaskit/ads-mcp
2
2
 
3
+ ## 0.2.0
4
+
5
+ ### Minor Changes
6
+
7
+ - [#172423](https://bitbucket.org/atlassian/atlassian-frontend-monorepo/pull-requests/172423)
8
+ [`ec1b840853a1d`](https://bitbucket.org/atlassian/atlassian-frontend-monorepo/commits/ec1b840853a1d) -
9
+ Adds contentGuidelines to multiple component details responses.
10
+
11
+ ## 0.1.9
12
+
13
+ ### Patch Changes
14
+
15
+ - Updated dependencies
16
+
3
17
  ## 0.1.8
4
18
 
5
19
  ### Patch Changes
package/README.md CHANGED
@@ -13,29 +13,30 @@ Add an entry to your `mcp.json` (eg. `~/.cursor/mcp.json` or wherever your MCP c
13
13
 
14
14
  ```json
15
15
  {
16
- "mcpServers": {
17
- "ads": {
18
- "command": "npx",
19
- "args": ["-y", "@atlaskit/ads-mcp"]
20
- }
21
- }
16
+ "mcpServers": {
17
+ "ads": {
18
+ "command": "npx",
19
+ "args": ["-y", "@atlaskit/ads-mcp"]
20
+ }
21
+ }
22
22
  }
23
23
  ```
24
24
 
25
25
  ## Development
26
26
 
27
- You may automatically be served the local version of `@atlaskit/ads-mcp` depending on where you're running it from, but you should force it like so:
27
+ You may automatically be served the local version of `@atlaskit/ads-mcp` depending on where you're
28
+ running it from, but you should force it like so:
28
29
 
29
30
  ```json
30
31
  {
31
- "mcpServers": {
32
- "ads": {
33
- "command": "npx",
34
- "args": [
35
- "-y",
36
- "~/git/atlassian/atlassian-frontend-monorepo/platform/packages/design-system/ads-mcp"
37
- ]
38
- }
39
- }
32
+ "mcpServers": {
33
+ "ads": {
34
+ "command": "npx",
35
+ "args": [
36
+ "-y",
37
+ "~/git/atlassian/atlassian-frontend-monorepo/platform/packages/design-system/ads-mcp"
38
+ ]
39
+ }
40
+ }
40
41
  }
41
42
  ```
@@ -11,6 +11,7 @@ var components = exports.components = [{
11
11
  releasePhase: 'general_availability',
12
12
  category: 'Forms and Input',
13
13
  example: "import Button from '@atlaskit/button/new';\nimport CopyIcon from '@atlaskit/icon/core/copy';\nimport AddIcon from '@atlaskit/icon/core/add';\n\n<Button appearance=\"success\" iconAfter={AddIcon}>Create</Button>\n<Button appearance=\"primary\" iconBefore={CopyIcon}>Copy text</Button>",
14
+ contentGuidelines: ['Use action verbs that describe the interaction', 'Keep text concise (1-3 words ideal)', 'Avoid generic terms like "Submit" or "Click here"', 'Use sentence case', 'Use buttons for actions, links for navigation', 'Only include one primary call to action (CTA) per area', "Start with the verb and specify what's being acted on", "Don't use punctuation in button labels"],
14
15
  props: [{
15
16
  name: 'appearance',
16
17
  description: 'Visual style of the button',
@@ -357,6 +358,7 @@ var components = exports.components = [{
357
358
  releasePhase: 'general_availability',
358
359
  category: 'Forms and Input',
359
360
  example: "import Form, { Field, FormFooter, FormHeader, FormSection, HelperMessage, ErrorMessage } from '@atlaskit/form';\nimport Button from '@atlaskit/button/new';\nimport TextField from '@atlaskit/textfield';\nimport { Checkbox } from '@atlaskit/checkbox';\n\n// Basic form with validation\n<Form onSubmit={data => console.log('form data', data)}>\n\t{({ formProps }) => (\n\t\t<form {...formProps}>\n\t\t\t<FormHeader title=\"Sign in\">\n\t\t\t\t<p>Required fields are marked with an asterisk *</p>\n\t\t\t</FormHeader>\n\n\t\t\t<FormSection>\n\t\t\t\t<Field name=\"username\" label=\"Username\" isRequired>\n\t\t\t\t\t{({ fieldProps, error }) => (\n\t\t\t\t\t\t<>\n\t\t\t\t\t\t\t<TextField autoComplete=\"username\" {...fieldProps} />\n\t\t\t\t\t\t\t{!error && <HelperMessage>You can use letters, numbers & periods.</HelperMessage>}\n\t\t\t\t\t\t\t{error && <ErrorMessage>This username is already in use.</ErrorMessage>}\n\t\t\t\t\t\t</>\n\t\t\t\t\t)}\n\t\t\t\t</Field>\n\n\t\t\t\t<Field\n\t\t\t\t\tname=\"password\"\n\t\t\t\t\tlabel=\"Password\"\n\t\t\t\t\tisRequired\n\t\t\t\t\tvalidate={value => (value && value.length < 8 ? 'TOO_SHORT' : undefined)}\n\t\t\t\t>\n\t\t\t\t\t{({ fieldProps, error, valid }) => (\n\t\t\t\t\t\t<>\n\t\t\t\t\t\t\t<TextField type=\"password\" {...fieldProps} />\n\t\t\t\t\t\t\t{!error && !valid && (\n\t\t\t\t\t\t\t\t<HelperMessage>\n\t\t\t\t\t\t\t\t\tUse 8 or more characters with letters, numbers & symbols.\n\t\t\t\t\t\t\t\t</HelperMessage>\n\t\t\t\t\t\t\t)}\n\t\t\t\t\t\t\t{error && <ErrorMessage>Password must be at least 8 characters.</ErrorMessage>}\n\t\t\t\t\t\t</>\n\t\t\t\t\t)}\n\t\t\t\t</Field>\n\n\t\t\t\t<Field name=\"remember\" defaultValue={false}>\n\t\t\t\t\t{({ fieldProps }) => (\n\t\t\t\t\t\t<Checkbox {...fieldProps} label=\"Remember me\" />\n\t\t\t\t\t)}\n\t\t\t\t</Field>\n\t\t\t</FormSection>\n\n\t\t\t<FormFooter>\n\t\t\t\t<Button type=\"submit\" appearance=\"primary\">Sign in</Button>\n\t\t\t</FormFooter>\n\t\t</form>\n\t)}\n</Form>",
361
+ contentGuidelines: ['Use clear, concise labels', 'Write helpful placeholder text', 'Provide specific error messages', 'Use consistent terminology', 'Use single column layout for better comprehension', 'Mark required fields with an asterisk (*)', 'Always include a visible label (exception: search fields)', 'Match field length to intended content length'],
360
362
  props: [{
361
363
  name: 'onSubmit',
362
364
  description: 'Callback when the form is submitted with valid data',
@@ -657,6 +659,8 @@ var components = exports.components = [{
657
659
  releasePhase: 'general_availability',
658
660
  category: 'Messaging',
659
661
  example: "import Banner from '@atlaskit/banner';\n\n<Banner\n\tappearance=\"announcement\"\n\tisOpen={true}\n\ticon={<Icon />}\n>\n\tImportant announcement\n</Banner>",
662
+ contentGuidelines: ['Reserved for critical system-level messaging', 'Use for warnings about data/functionality loss'],
663
+ usageGuidelines: ['This should appear at the top of the screen'],
660
664
  props: [{
661
665
  name: 'appearance',
662
666
  description: 'Visual style of the banner',
@@ -681,6 +685,8 @@ var components = exports.components = [{
681
685
  releasePhase: 'general_availability',
682
686
  category: 'Messaging',
683
687
  example: "import Flag, { FlagGroup } from '@atlaskit/flag';\n\n<FlagGroup>\n\t<Flag\n\t\tid=\"flag-1\"\n\t\ticon={<Icon label=\"Info\" />}\n\t\ttitle=\"Flag Title\"\n\t\tdescription=\"Flag description\"\n\t\tactions={[\n\t\t\t{\n\t\t\t\tcontent: 'Action',\n\t\t\t\tonClick: () => {},\n\t\t\t\ttestId: 'action-test'\n\t\t\t}\n\t\t]}\n\t\tappearance=\"normal\"\n\t\ttestId=\"flag-test\"\n\t/>\n</FlagGroup>",
688
+ contentGuidelines: ['Use for confirmations and alerts needing minimal interaction', 'Display event-driven messages', 'Be clear about what went wrong for errors', 'Provide specific steps to resolve issues', 'Use a helpful, non-threatening tone', 'Clearly state potential consequences for warnings', 'Confirm outcome then get out of the way for success messages'],
689
+ usageGuidelines: ['This should appear at the bottom left of the screen, emerging from the navigation sidebar'],
684
690
  props: [{
685
691
  name: 'id',
686
692
  description: 'A unique identifier used for rendering and onDismissed callbacks',
@@ -713,6 +719,7 @@ var components = exports.components = [{
713
719
  releasePhase: 'general_availability',
714
720
  category: 'Messaging',
715
721
  example: "import InlineMessage from '@atlaskit/inline-message';\n\n<InlineMessage\n title=\"Inline Message Title\"\n secondaryText=\"Secondary text\"\n appearance=\"info\"\n testId=\"inline-message-test\"\n>\n <p>Content that appears in the dialog when opened</p>\n</InlineMessage>",
722
+ contentGuidelines: ['Alerts for required actions or important information', 'Includes icon, message, and optional secondary text', 'Interactive elements reveal full message'],
716
723
  props: [{
717
724
  name: 'title',
718
725
  description: 'Text to display first, bolded for emphasis',
@@ -737,6 +744,7 @@ var components = exports.components = [{
737
744
  releasePhase: 'general_availability',
738
745
  category: 'Messaging',
739
746
  example: "import { Spotlight } from '@atlaskit/onboarding';\n\n<Spotlight\n target=\"target-element\"\n content=\"Feature description\"\n/>",
747
+ contentGuidelines: ['Introduces features through focused messages or tours', 'Flexible layout options', 'Used for feature discovery and guidance', 'Keep messages to two lines in length', 'Focus on single changes and their benefits', 'Avoid just naming functions', 'Write in sentence case', 'Include clear call-to-action', 'Communicate main benefit to user in headings', 'Keep headings to a few words', 'Personalize where possible', 'Include benefits and importance to the user', 'Put important keywords at start of sentence', 'Only reference UI elements visible on screen', 'Use "Next" for step progression', 'Use "OK" for final step or closing action', 'Always offer way to opt out', 'Show one spotlight at a time', 'Keep tours to 3-4 steps maximum', 'Sequence tasks logically', 'Drive content by user benefits and value', 'Be thoughtful of user context and state', 'Focus on key benefits and quick wins for new users', 'Highlight value before mechanics for feature introduction'],
740
748
  props: [{
741
749
  name: 'target',
742
750
  description: 'Target element ID',
@@ -757,6 +765,7 @@ var components = exports.components = [{
757
765
  releasePhase: 'general_availability',
758
766
  category: 'Messaging',
759
767
  example: "import SectionMessage from '@atlaskit/section-message';\n\n<SectionMessage\n appearance=\"information\"\n title=\"Section Message Title\"\n testId=\"section-message-test\"\n>\n <p>Section message content</p>\n <SectionMessage.Actions>\n <SectionMessage.Action href=\"#\">Action</SectionMessage.Action>\n </SectionMessage.Actions>\n</SectionMessage>",
768
+ contentGuidelines: ['Alerts about section-specific events', 'Appears above affected area', 'Used for contextual information'],
760
769
  props: [{
761
770
  name: 'appearance',
762
771
  description: 'The appearance styling to use for the section message',
@@ -981,6 +990,7 @@ var components = exports.components = [{
981
990
  releasePhase: 'general_availability',
982
991
  category: 'Overlays and Layering',
983
992
  example: "import Tooltip from '@atlaskit/tooltip';\n\n<Tooltip content=\"Tooltip content\">\n <button>Hover me</button>\n</Tooltip>",
993
+ contentGuidelines: ['Keep it brief (ideally 1-3 words, max 8 words)', 'Use sentence case', 'No punctuation at the end', 'Use clear, direct language', 'Avoid technical jargon', 'Never include links or interactive elements', "Don't truncate tooltip text"],
984
994
  props: [{
985
995
  name: 'content',
986
996
  description: 'Tooltip content',
@@ -1025,6 +1035,8 @@ var components = exports.components = [{
1025
1035
  releasePhase: 'general_availability',
1026
1036
  category: 'Status Indicators',
1027
1037
  example: "import EmptyState from '@atlaskit/empty-state';\n\n<EmptyState\n header=\"No items\"\n description=\"Add items to get started\"\n/>",
1038
+ contentGuidelines: ['Use when nothing to display in a view', 'Appropriate for: no tasks, cleared inbox, no search results', 'Explain why the state is empty', 'Provide clear next steps', 'Keep tone helpful and encouraging', 'Consider all scenarios causing the empty state', 'Use inspirational, motivating tone for first-time view'],
1039
+ usageGuidelines: ['Can appear full-screen or within containers'],
1028
1040
  props: [{
1029
1041
  name: 'header',
1030
1042
  description: 'Empty state header',
@@ -1653,6 +1665,7 @@ var components = exports.components = [{
1653
1665
  releasePhase: 'general_availability',
1654
1666
  category: 'Messaging',
1655
1667
  example: "import React, { Fragment, useCallback, useState } from 'react';\nimport Button from '@atlaskit/button/new';\nimport Modal, {\n\tModalBody,\n\tModalFooter,\n\tModalHeader,\n\tModalTitle,\n\tModalTransition,\n} from '@atlaskit/modal-dialog';\n\nexport default function Example() {\n\tconst [isOpen, setIsOpen] = useState(false);\n\tconst openModal = useCallback(() => setIsOpen(true), []);\n\tconst closeModal = useCallback(() => setIsOpen(false), []);\n\n\treturn (\n\t\t<Fragment>\n\t\t\t<Button aria-haspopup=\"dialog\" appearance=\"primary\" onClick={openModal}>\n\t\t\t\tOpen modal\n\t\t\t</Button>\n\n\t\t\t<ModalTransition>\n\t\t\t\t{isOpen && (\n\t\t\t\t\t<Modal onClose={closeModal}>\n\t\t\t\t\t\t<ModalHeader hasCloseButton>\n\t\t\t\t\t\t\t<ModalTitle>Default modal header</ModalTitle>\n\t\t\t\t\t\t</ModalHeader>\n\t\t\t\t\t\t<ModalBody>\n\t\t\t\t\t\t\tYour modal content.\n\t\t\t\t\t\t</ModalBody>\n\t\t\t\t\t\t<ModalFooter>\n\t\t\t\t\t\t\t<Button appearance=\"subtle\">About modals</Button>\n\t\t\t\t\t\t\t<Button appearance=\"primary\" onClick={closeModal}>\n\t\t\t\t\t\t\t\tClose\n\t\t\t\t\t\t\t</Button>\n\t\t\t\t\t\t</ModalFooter>\n\t\t\t\t\t</Modal>\n\t\t\t\t)}\n\t\t\t</ModalTransition>\n\t\t</Fragment>\n\t);\n}",
1668
+ contentGuidelines: ['Present short-term tasks', 'Displays content above page layer', 'Used for focused interactions', 'Use clear, descriptive titles', 'Keep content focused on a single task or message', 'Include clear action buttons', 'Use sentence case for all text'],
1656
1669
  props: [{
1657
1670
  name: 'autoFocus',
1658
1671
  description: 'Focus is moved to the first interactive element or specified element',
@@ -10,6 +10,7 @@ import AddIcon from '@atlaskit/icon/core/add';
10
10
 
11
11
  <Button appearance="success" iconAfter={AddIcon}>Create</Button>
12
12
  <Button appearance="primary" iconBefore={CopyIcon}>Copy text</Button>`,
13
+ contentGuidelines: ['Use action verbs that describe the interaction', 'Keep text concise (1-3 words ideal)', 'Avoid generic terms like "Submit" or "Click here"', 'Use sentence case', 'Use buttons for actions, links for navigation', 'Only include one primary call to action (CTA) per area', "Start with the verb and specify what's being acted on", "Don't use punctuation in button labels"],
13
14
  props: [{
14
15
  name: 'appearance',
15
16
  description: 'Visual style of the button',
@@ -764,6 +765,7 @@ import { Checkbox } from '@atlaskit/checkbox';
764
765
  </form>
765
766
  )}
766
767
  </Form>`,
768
+ contentGuidelines: ['Use clear, concise labels', 'Write helpful placeholder text', 'Provide specific error messages', 'Use consistent terminology', 'Use single column layout for better comprehension', 'Mark required fields with an asterisk (*)', 'Always include a visible label (exception: search fields)', 'Match field length to intended content length'],
767
769
  props: [{
768
770
  name: 'onSubmit',
769
771
  description: 'Callback when the form is submitted with valid data',
@@ -1159,6 +1161,8 @@ import CommentIcon from '@atlaskit/icon/core/comment';
1159
1161
  >
1160
1162
  Important announcement
1161
1163
  </Banner>`,
1164
+ contentGuidelines: ['Reserved for critical system-level messaging', 'Use for warnings about data/functionality loss'],
1165
+ usageGuidelines: ['This should appear at the top of the screen'],
1162
1166
  props: [{
1163
1167
  name: 'appearance',
1164
1168
  description: 'Visual style of the banner',
@@ -1201,6 +1205,8 @@ import CommentIcon from '@atlaskit/icon/core/comment';
1201
1205
  testId="flag-test"
1202
1206
  />
1203
1207
  </FlagGroup>`,
1208
+ contentGuidelines: ['Use for confirmations and alerts needing minimal interaction', 'Display event-driven messages', 'Be clear about what went wrong for errors', 'Provide specific steps to resolve issues', 'Use a helpful, non-threatening tone', 'Clearly state potential consequences for warnings', 'Confirm outcome then get out of the way for success messages'],
1209
+ usageGuidelines: ['This should appear at the bottom left of the screen, emerging from the navigation sidebar'],
1204
1210
  props: [{
1205
1211
  name: 'id',
1206
1212
  description: 'A unique identifier used for rendering and onDismissed callbacks',
@@ -1242,6 +1248,7 @@ import CommentIcon from '@atlaskit/icon/core/comment';
1242
1248
  >
1243
1249
  <p>Content that appears in the dialog when opened</p>
1244
1250
  </InlineMessage>`,
1251
+ contentGuidelines: ['Alerts for required actions or important information', 'Includes icon, message, and optional secondary text', 'Interactive elements reveal full message'],
1245
1252
  props: [{
1246
1253
  name: 'title',
1247
1254
  description: 'Text to display first, bolded for emphasis',
@@ -1271,6 +1278,7 @@ import CommentIcon from '@atlaskit/icon/core/comment';
1271
1278
  target="target-element"
1272
1279
  content="Feature description"
1273
1280
  />`,
1281
+ contentGuidelines: ['Introduces features through focused messages or tours', 'Flexible layout options', 'Used for feature discovery and guidance', 'Keep messages to two lines in length', 'Focus on single changes and their benefits', 'Avoid just naming functions', 'Write in sentence case', 'Include clear call-to-action', 'Communicate main benefit to user in headings', 'Keep headings to a few words', 'Personalize where possible', 'Include benefits and importance to the user', 'Put important keywords at start of sentence', 'Only reference UI elements visible on screen', 'Use "Next" for step progression', 'Use "OK" for final step or closing action', 'Always offer way to opt out', 'Show one spotlight at a time', 'Keep tours to 3-4 steps maximum', 'Sequence tasks logically', 'Drive content by user benefits and value', 'Be thoughtful of user context and state', 'Focus on key benefits and quick wins for new users', 'Highlight value before mechanics for feature introduction'],
1274
1282
  props: [{
1275
1283
  name: 'target',
1276
1284
  description: 'Target element ID',
@@ -1302,6 +1310,7 @@ import CommentIcon from '@atlaskit/icon/core/comment';
1302
1310
  <SectionMessage.Action href="#">Action</SectionMessage.Action>
1303
1311
  </SectionMessage.Actions>
1304
1312
  </SectionMessage>`,
1313
+ contentGuidelines: ['Alerts about section-specific events', 'Appears above affected area', 'Used for contextual information'],
1305
1314
  props: [{
1306
1315
  name: 'appearance',
1307
1316
  description: 'The appearance styling to use for the section message',
@@ -1616,6 +1625,7 @@ import { Help, NavLogo } from '@atlassian/navigation-system/top-nav-items';
1616
1625
  <Tooltip content="Tooltip content">
1617
1626
  <button>Hover me</button>
1618
1627
  </Tooltip>`,
1628
+ contentGuidelines: ['Keep it brief (ideally 1-3 words, max 8 words)', 'Use sentence case', 'No punctuation at the end', 'Use clear, direct language', 'Avoid technical jargon', 'Never include links or interactive elements', "Don't truncate tooltip text"],
1619
1629
  props: [{
1620
1630
  name: 'content',
1621
1631
  description: 'Tooltip content',
@@ -1671,6 +1681,8 @@ import { Help, NavLogo } from '@atlassian/navigation-system/top-nav-items';
1671
1681
  header="No items"
1672
1682
  description="Add items to get started"
1673
1683
  />`,
1684
+ contentGuidelines: ['Use when nothing to display in a view', 'Appropriate for: no tasks, cleared inbox, no search results', 'Explain why the state is empty', 'Provide clear next steps', 'Keep tone helpful and encouraging', 'Consider all scenarios causing the empty state', 'Use inspirational, motivating tone for first-time view'],
1685
+ usageGuidelines: ['Can appear full-screen or within containers'],
1674
1686
  props: [{
1675
1687
  name: 'header',
1676
1688
  description: 'Empty state header',
@@ -2457,6 +2469,7 @@ export default function Example() {
2457
2469
  </Fragment>
2458
2470
  );
2459
2471
  }`,
2472
+ contentGuidelines: ['Present short-term tasks', 'Displays content above page layer', 'Used for focused interactions', 'Use clear, descriptive titles', 'Keep content focused on a single task or message', 'Include clear action buttons', 'Use sentence case for all text'],
2460
2473
  props: [{
2461
2474
  name: 'autoFocus',
2462
2475
  description: 'Focus is moved to the first interactive element or specified element',
@@ -5,6 +5,7 @@ export var components = [{
5
5
  releasePhase: 'general_availability',
6
6
  category: 'Forms and Input',
7
7
  example: "import Button from '@atlaskit/button/new';\nimport CopyIcon from '@atlaskit/icon/core/copy';\nimport AddIcon from '@atlaskit/icon/core/add';\n\n<Button appearance=\"success\" iconAfter={AddIcon}>Create</Button>\n<Button appearance=\"primary\" iconBefore={CopyIcon}>Copy text</Button>",
8
+ contentGuidelines: ['Use action verbs that describe the interaction', 'Keep text concise (1-3 words ideal)', 'Avoid generic terms like "Submit" or "Click here"', 'Use sentence case', 'Use buttons for actions, links for navigation', 'Only include one primary call to action (CTA) per area', "Start with the verb and specify what's being acted on", "Don't use punctuation in button labels"],
8
9
  props: [{
9
10
  name: 'appearance',
10
11
  description: 'Visual style of the button',
@@ -351,6 +352,7 @@ export var components = [{
351
352
  releasePhase: 'general_availability',
352
353
  category: 'Forms and Input',
353
354
  example: "import Form, { Field, FormFooter, FormHeader, FormSection, HelperMessage, ErrorMessage } from '@atlaskit/form';\nimport Button from '@atlaskit/button/new';\nimport TextField from '@atlaskit/textfield';\nimport { Checkbox } from '@atlaskit/checkbox';\n\n// Basic form with validation\n<Form onSubmit={data => console.log('form data', data)}>\n\t{({ formProps }) => (\n\t\t<form {...formProps}>\n\t\t\t<FormHeader title=\"Sign in\">\n\t\t\t\t<p>Required fields are marked with an asterisk *</p>\n\t\t\t</FormHeader>\n\n\t\t\t<FormSection>\n\t\t\t\t<Field name=\"username\" label=\"Username\" isRequired>\n\t\t\t\t\t{({ fieldProps, error }) => (\n\t\t\t\t\t\t<>\n\t\t\t\t\t\t\t<TextField autoComplete=\"username\" {...fieldProps} />\n\t\t\t\t\t\t\t{!error && <HelperMessage>You can use letters, numbers & periods.</HelperMessage>}\n\t\t\t\t\t\t\t{error && <ErrorMessage>This username is already in use.</ErrorMessage>}\n\t\t\t\t\t\t</>\n\t\t\t\t\t)}\n\t\t\t\t</Field>\n\n\t\t\t\t<Field\n\t\t\t\t\tname=\"password\"\n\t\t\t\t\tlabel=\"Password\"\n\t\t\t\t\tisRequired\n\t\t\t\t\tvalidate={value => (value && value.length < 8 ? 'TOO_SHORT' : undefined)}\n\t\t\t\t>\n\t\t\t\t\t{({ fieldProps, error, valid }) => (\n\t\t\t\t\t\t<>\n\t\t\t\t\t\t\t<TextField type=\"password\" {...fieldProps} />\n\t\t\t\t\t\t\t{!error && !valid && (\n\t\t\t\t\t\t\t\t<HelperMessage>\n\t\t\t\t\t\t\t\t\tUse 8 or more characters with letters, numbers & symbols.\n\t\t\t\t\t\t\t\t</HelperMessage>\n\t\t\t\t\t\t\t)}\n\t\t\t\t\t\t\t{error && <ErrorMessage>Password must be at least 8 characters.</ErrorMessage>}\n\t\t\t\t\t\t</>\n\t\t\t\t\t)}\n\t\t\t\t</Field>\n\n\t\t\t\t<Field name=\"remember\" defaultValue={false}>\n\t\t\t\t\t{({ fieldProps }) => (\n\t\t\t\t\t\t<Checkbox {...fieldProps} label=\"Remember me\" />\n\t\t\t\t\t)}\n\t\t\t\t</Field>\n\t\t\t</FormSection>\n\n\t\t\t<FormFooter>\n\t\t\t\t<Button type=\"submit\" appearance=\"primary\">Sign in</Button>\n\t\t\t</FormFooter>\n\t\t</form>\n\t)}\n</Form>",
355
+ contentGuidelines: ['Use clear, concise labels', 'Write helpful placeholder text', 'Provide specific error messages', 'Use consistent terminology', 'Use single column layout for better comprehension', 'Mark required fields with an asterisk (*)', 'Always include a visible label (exception: search fields)', 'Match field length to intended content length'],
354
356
  props: [{
355
357
  name: 'onSubmit',
356
358
  description: 'Callback when the form is submitted with valid data',
@@ -651,6 +653,8 @@ export var components = [{
651
653
  releasePhase: 'general_availability',
652
654
  category: 'Messaging',
653
655
  example: "import Banner from '@atlaskit/banner';\n\n<Banner\n\tappearance=\"announcement\"\n\tisOpen={true}\n\ticon={<Icon />}\n>\n\tImportant announcement\n</Banner>",
656
+ contentGuidelines: ['Reserved for critical system-level messaging', 'Use for warnings about data/functionality loss'],
657
+ usageGuidelines: ['This should appear at the top of the screen'],
654
658
  props: [{
655
659
  name: 'appearance',
656
660
  description: 'Visual style of the banner',
@@ -675,6 +679,8 @@ export var components = [{
675
679
  releasePhase: 'general_availability',
676
680
  category: 'Messaging',
677
681
  example: "import Flag, { FlagGroup } from '@atlaskit/flag';\n\n<FlagGroup>\n\t<Flag\n\t\tid=\"flag-1\"\n\t\ticon={<Icon label=\"Info\" />}\n\t\ttitle=\"Flag Title\"\n\t\tdescription=\"Flag description\"\n\t\tactions={[\n\t\t\t{\n\t\t\t\tcontent: 'Action',\n\t\t\t\tonClick: () => {},\n\t\t\t\ttestId: 'action-test'\n\t\t\t}\n\t\t]}\n\t\tappearance=\"normal\"\n\t\ttestId=\"flag-test\"\n\t/>\n</FlagGroup>",
682
+ contentGuidelines: ['Use for confirmations and alerts needing minimal interaction', 'Display event-driven messages', 'Be clear about what went wrong for errors', 'Provide specific steps to resolve issues', 'Use a helpful, non-threatening tone', 'Clearly state potential consequences for warnings', 'Confirm outcome then get out of the way for success messages'],
683
+ usageGuidelines: ['This should appear at the bottom left of the screen, emerging from the navigation sidebar'],
678
684
  props: [{
679
685
  name: 'id',
680
686
  description: 'A unique identifier used for rendering and onDismissed callbacks',
@@ -707,6 +713,7 @@ export var components = [{
707
713
  releasePhase: 'general_availability',
708
714
  category: 'Messaging',
709
715
  example: "import InlineMessage from '@atlaskit/inline-message';\n\n<InlineMessage\n title=\"Inline Message Title\"\n secondaryText=\"Secondary text\"\n appearance=\"info\"\n testId=\"inline-message-test\"\n>\n <p>Content that appears in the dialog when opened</p>\n</InlineMessage>",
716
+ contentGuidelines: ['Alerts for required actions or important information', 'Includes icon, message, and optional secondary text', 'Interactive elements reveal full message'],
710
717
  props: [{
711
718
  name: 'title',
712
719
  description: 'Text to display first, bolded for emphasis',
@@ -731,6 +738,7 @@ export var components = [{
731
738
  releasePhase: 'general_availability',
732
739
  category: 'Messaging',
733
740
  example: "import { Spotlight } from '@atlaskit/onboarding';\n\n<Spotlight\n target=\"target-element\"\n content=\"Feature description\"\n/>",
741
+ contentGuidelines: ['Introduces features through focused messages or tours', 'Flexible layout options', 'Used for feature discovery and guidance', 'Keep messages to two lines in length', 'Focus on single changes and their benefits', 'Avoid just naming functions', 'Write in sentence case', 'Include clear call-to-action', 'Communicate main benefit to user in headings', 'Keep headings to a few words', 'Personalize where possible', 'Include benefits and importance to the user', 'Put important keywords at start of sentence', 'Only reference UI elements visible on screen', 'Use "Next" for step progression', 'Use "OK" for final step or closing action', 'Always offer way to opt out', 'Show one spotlight at a time', 'Keep tours to 3-4 steps maximum', 'Sequence tasks logically', 'Drive content by user benefits and value', 'Be thoughtful of user context and state', 'Focus on key benefits and quick wins for new users', 'Highlight value before mechanics for feature introduction'],
734
742
  props: [{
735
743
  name: 'target',
736
744
  description: 'Target element ID',
@@ -751,6 +759,7 @@ export var components = [{
751
759
  releasePhase: 'general_availability',
752
760
  category: 'Messaging',
753
761
  example: "import SectionMessage from '@atlaskit/section-message';\n\n<SectionMessage\n appearance=\"information\"\n title=\"Section Message Title\"\n testId=\"section-message-test\"\n>\n <p>Section message content</p>\n <SectionMessage.Actions>\n <SectionMessage.Action href=\"#\">Action</SectionMessage.Action>\n </SectionMessage.Actions>\n</SectionMessage>",
762
+ contentGuidelines: ['Alerts about section-specific events', 'Appears above affected area', 'Used for contextual information'],
754
763
  props: [{
755
764
  name: 'appearance',
756
765
  description: 'The appearance styling to use for the section message',
@@ -975,6 +984,7 @@ export var components = [{
975
984
  releasePhase: 'general_availability',
976
985
  category: 'Overlays and Layering',
977
986
  example: "import Tooltip from '@atlaskit/tooltip';\n\n<Tooltip content=\"Tooltip content\">\n <button>Hover me</button>\n</Tooltip>",
987
+ contentGuidelines: ['Keep it brief (ideally 1-3 words, max 8 words)', 'Use sentence case', 'No punctuation at the end', 'Use clear, direct language', 'Avoid technical jargon', 'Never include links or interactive elements', "Don't truncate tooltip text"],
978
988
  props: [{
979
989
  name: 'content',
980
990
  description: 'Tooltip content',
@@ -1019,6 +1029,8 @@ export var components = [{
1019
1029
  releasePhase: 'general_availability',
1020
1030
  category: 'Status Indicators',
1021
1031
  example: "import EmptyState from '@atlaskit/empty-state';\n\n<EmptyState\n header=\"No items\"\n description=\"Add items to get started\"\n/>",
1032
+ contentGuidelines: ['Use when nothing to display in a view', 'Appropriate for: no tasks, cleared inbox, no search results', 'Explain why the state is empty', 'Provide clear next steps', 'Keep tone helpful and encouraging', 'Consider all scenarios causing the empty state', 'Use inspirational, motivating tone for first-time view'],
1033
+ usageGuidelines: ['Can appear full-screen or within containers'],
1022
1034
  props: [{
1023
1035
  name: 'header',
1024
1036
  description: 'Empty state header',
@@ -1647,6 +1659,7 @@ export var components = [{
1647
1659
  releasePhase: 'general_availability',
1648
1660
  category: 'Messaging',
1649
1661
  example: "import React, { Fragment, useCallback, useState } from 'react';\nimport Button from '@atlaskit/button/new';\nimport Modal, {\n\tModalBody,\n\tModalFooter,\n\tModalHeader,\n\tModalTitle,\n\tModalTransition,\n} from '@atlaskit/modal-dialog';\n\nexport default function Example() {\n\tconst [isOpen, setIsOpen] = useState(false);\n\tconst openModal = useCallback(() => setIsOpen(true), []);\n\tconst closeModal = useCallback(() => setIsOpen(false), []);\n\n\treturn (\n\t\t<Fragment>\n\t\t\t<Button aria-haspopup=\"dialog\" appearance=\"primary\" onClick={openModal}>\n\t\t\t\tOpen modal\n\t\t\t</Button>\n\n\t\t\t<ModalTransition>\n\t\t\t\t{isOpen && (\n\t\t\t\t\t<Modal onClose={closeModal}>\n\t\t\t\t\t\t<ModalHeader hasCloseButton>\n\t\t\t\t\t\t\t<ModalTitle>Default modal header</ModalTitle>\n\t\t\t\t\t\t</ModalHeader>\n\t\t\t\t\t\t<ModalBody>\n\t\t\t\t\t\t\tYour modal content.\n\t\t\t\t\t\t</ModalBody>\n\t\t\t\t\t\t<ModalFooter>\n\t\t\t\t\t\t\t<Button appearance=\"subtle\">About modals</Button>\n\t\t\t\t\t\t\t<Button appearance=\"primary\" onClick={closeModal}>\n\t\t\t\t\t\t\t\tClose\n\t\t\t\t\t\t\t</Button>\n\t\t\t\t\t\t</ModalFooter>\n\t\t\t\t\t</Modal>\n\t\t\t\t)}\n\t\t\t</ModalTransition>\n\t\t</Fragment>\n\t);\n}",
1662
+ contentGuidelines: ['Present short-term tasks', 'Displays content above page layer', 'Used for focused interactions', 'Use clear, descriptive titles', 'Keep content focused on a single task or message', 'Include clear action buttons', 'Use sentence case for all text'],
1650
1663
  props: [{
1651
1664
  name: 'autoFocus',
1652
1665
  description: 'Focus is moved to the first interactive element or specified element',
@@ -14,6 +14,7 @@ export interface Component {
14
14
  example: string;
15
15
  accessibilityGuidelines?: string[];
16
16
  usageGuidelines?: string[];
17
+ contentGuidelines?: string[];
17
18
  props: Prop[];
18
19
  }
19
20
  export declare const components: Component[];
@@ -14,6 +14,7 @@ export interface Component {
14
14
  example: string;
15
15
  accessibilityGuidelines?: string[];
16
16
  usageGuidelines?: string[];
17
+ contentGuidelines?: string[];
17
18
  props: Prop[];
18
19
  }
19
20
  export declare const components: Component[];
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@atlaskit/ads-mcp",
3
- "version": "0.1.8",
3
+ "version": "0.2.0",
4
4
  "description": "The official Atlassian Design System MCP server to develop apps and user interfaces matching the Atlassian style.",
5
5
  "author": "Atlassian Pty Ltd",
6
6
  "license": "Apache-2.0",
@@ -30,8 +30,8 @@
30
30
  "./package.json": "./package.json"
31
31
  },
32
32
  "dependencies": {
33
- "@atlaskit/icon": "^26.4.0",
34
- "@atlaskit/tokens": "^5.2.0",
33
+ "@atlaskit/icon": "^27.0.0",
34
+ "@atlaskit/tokens": "^5.3.0",
35
35
  "@babel/runtime": "^7.0.0",
36
36
  "@modelcontextprotocol/sdk": "^1.8.0",
37
37
  "zod": "^3.23.8",
@@ -16,6 +16,7 @@ export interface Component {
16
16
  example: string;
17
17
  accessibilityGuidelines?: string[];
18
18
  usageGuidelines?: string[];
19
+ contentGuidelines?: string[];
19
20
  props: Prop[];
20
21
  }
21
22
 
@@ -32,6 +33,16 @@ import AddIcon from '@atlaskit/icon/core/add';
32
33
 
33
34
  <Button appearance="success" iconAfter={AddIcon}>Create</Button>
34
35
  <Button appearance="primary" iconBefore={CopyIcon}>Copy text</Button>`,
36
+ contentGuidelines: [
37
+ 'Use action verbs that describe the interaction',
38
+ 'Keep text concise (1-3 words ideal)',
39
+ 'Avoid generic terms like "Submit" or "Click here"',
40
+ 'Use sentence case',
41
+ 'Use buttons for actions, links for navigation',
42
+ 'Only include one primary call to action (CTA) per area',
43
+ "Start with the verb and specify what's being acted on",
44
+ "Don't use punctuation in button labels",
45
+ ],
35
46
  props: [
36
47
  {
37
48
  name: 'appearance',
@@ -852,6 +863,16 @@ import { Checkbox } from '@atlaskit/checkbox';
852
863
  </form>
853
864
  )}
854
865
  </Form>`,
866
+ contentGuidelines: [
867
+ 'Use clear, concise labels',
868
+ 'Write helpful placeholder text',
869
+ 'Provide specific error messages',
870
+ 'Use consistent terminology',
871
+ 'Use single column layout for better comprehension',
872
+ 'Mark required fields with an asterisk (*)',
873
+ 'Always include a visible label (exception: search fields)',
874
+ 'Match field length to intended content length',
875
+ ],
855
876
  props: [
856
877
  {
857
878
  name: 'onSubmit',
@@ -1322,6 +1343,11 @@ import CommentIcon from '@atlaskit/icon/core/comment';
1322
1343
  >
1323
1344
  Important announcement
1324
1345
  </Banner>`,
1346
+ contentGuidelines: [
1347
+ 'Reserved for critical system-level messaging',
1348
+ 'Use for warnings about data/functionality loss',
1349
+ ],
1350
+ usageGuidelines: ['This should appear at the top of the screen'],
1325
1351
  props: [
1326
1352
  {
1327
1353
  name: 'appearance',
@@ -1370,6 +1396,18 @@ import CommentIcon from '@atlaskit/icon/core/comment';
1370
1396
  testId="flag-test"
1371
1397
  />
1372
1398
  </FlagGroup>`,
1399
+ contentGuidelines: [
1400
+ 'Use for confirmations and alerts needing minimal interaction',
1401
+ 'Display event-driven messages',
1402
+ 'Be clear about what went wrong for errors',
1403
+ 'Provide specific steps to resolve issues',
1404
+ 'Use a helpful, non-threatening tone',
1405
+ 'Clearly state potential consequences for warnings',
1406
+ 'Confirm outcome then get out of the way for success messages',
1407
+ ],
1408
+ usageGuidelines: [
1409
+ 'This should appear at the bottom left of the screen, emerging from the navigation sidebar',
1410
+ ],
1373
1411
  props: [
1374
1412
  {
1375
1413
  name: 'id',
@@ -1421,6 +1459,11 @@ import CommentIcon from '@atlaskit/icon/core/comment';
1421
1459
  >
1422
1460
  <p>Content that appears in the dialog when opened</p>
1423
1461
  </InlineMessage>`,
1462
+ contentGuidelines: [
1463
+ 'Alerts for required actions or important information',
1464
+ 'Includes icon, message, and optional secondary text',
1465
+ 'Interactive elements reveal full message',
1466
+ ],
1424
1467
  props: [
1425
1468
  {
1426
1469
  name: 'title',
@@ -1456,6 +1499,32 @@ import CommentIcon from '@atlaskit/icon/core/comment';
1456
1499
  target="target-element"
1457
1500
  content="Feature description"
1458
1501
  />`,
1502
+ contentGuidelines: [
1503
+ 'Introduces features through focused messages or tours',
1504
+ 'Flexible layout options',
1505
+ 'Used for feature discovery and guidance',
1506
+ 'Keep messages to two lines in length',
1507
+ 'Focus on single changes and their benefits',
1508
+ 'Avoid just naming functions',
1509
+ 'Write in sentence case',
1510
+ 'Include clear call-to-action',
1511
+ 'Communicate main benefit to user in headings',
1512
+ 'Keep headings to a few words',
1513
+ 'Personalize where possible',
1514
+ 'Include benefits and importance to the user',
1515
+ 'Put important keywords at start of sentence',
1516
+ 'Only reference UI elements visible on screen',
1517
+ 'Use "Next" for step progression',
1518
+ 'Use "OK" for final step or closing action',
1519
+ 'Always offer way to opt out',
1520
+ 'Show one spotlight at a time',
1521
+ 'Keep tours to 3-4 steps maximum',
1522
+ 'Sequence tasks logically',
1523
+ 'Drive content by user benefits and value',
1524
+ 'Be thoughtful of user context and state',
1525
+ 'Focus on key benefits and quick wins for new users',
1526
+ 'Highlight value before mechanics for feature introduction',
1527
+ ],
1459
1528
  props: [
1460
1529
  {
1461
1530
  name: 'target',
@@ -1492,6 +1561,11 @@ import CommentIcon from '@atlaskit/icon/core/comment';
1492
1561
  <SectionMessage.Action href="#">Action</SectionMessage.Action>
1493
1562
  </SectionMessage.Actions>
1494
1563
  </SectionMessage>`,
1564
+ contentGuidelines: [
1565
+ 'Alerts about section-specific events',
1566
+ 'Appears above affected area',
1567
+ 'Used for contextual information',
1568
+ ],
1495
1569
  props: [
1496
1570
  {
1497
1571
  name: 'appearance',
@@ -1864,6 +1938,15 @@ import { Help, NavLogo } from '@atlassian/navigation-system/top-nav-items';
1864
1938
  <Tooltip content="Tooltip content">
1865
1939
  <button>Hover me</button>
1866
1940
  </Tooltip>`,
1941
+ contentGuidelines: [
1942
+ 'Keep it brief (ideally 1-3 words, max 8 words)',
1943
+ 'Use sentence case',
1944
+ 'No punctuation at the end',
1945
+ 'Use clear, direct language',
1946
+ 'Avoid technical jargon',
1947
+ 'Never include links or interactive elements',
1948
+ "Don't truncate tooltip text",
1949
+ ],
1867
1950
  props: [
1868
1951
  {
1869
1952
  name: 'content',
@@ -1930,6 +2013,16 @@ import { Help, NavLogo } from '@atlassian/navigation-system/top-nav-items';
1930
2013
  header="No items"
1931
2014
  description="Add items to get started"
1932
2015
  />`,
2016
+ contentGuidelines: [
2017
+ 'Use when nothing to display in a view',
2018
+ 'Appropriate for: no tasks, cleared inbox, no search results',
2019
+ 'Explain why the state is empty',
2020
+ 'Provide clear next steps',
2021
+ 'Keep tone helpful and encouraging',
2022
+ 'Consider all scenarios causing the empty state',
2023
+ 'Use inspirational, motivating tone for first-time view',
2024
+ ],
2025
+ usageGuidelines: ['Can appear full-screen or within containers'],
1933
2026
  props: [
1934
2027
  {
1935
2028
  name: 'header',
@@ -2887,6 +2980,15 @@ export default function Example() {
2887
2980
  </Fragment>
2888
2981
  );
2889
2982
  }`,
2983
+ contentGuidelines: [
2984
+ 'Present short-term tasks',
2985
+ 'Displays content above page layer',
2986
+ 'Used for focused interactions',
2987
+ 'Use clear, descriptive titles',
2988
+ 'Keep content focused on a single task or message',
2989
+ 'Include clear action buttons',
2990
+ 'Use sentence case for all text',
2991
+ ],
2890
2992
  props: [
2891
2993
  {
2892
2994
  name: 'autoFocus',